php之接口内curl请求其他接口
今天遇到一个需要写curl的需求,情况是这样的:
同一应用的A系统(购物系统),B系统(答题系统)相互独立,用户数据全部存在于A系统的数据库中,
现在处于B系统的某项操作中,需要在B系统中验证当前请求的人是不是此应用的会员,要验证是不是该应用的
会员,当然是要拿当前用户的标识到数据库比对啊,可是数据库在A系统里啊,当时我就想到了curl,画个图吧:

其实说白了,就是模拟http请求,因为不同于前端,可以通过ajax或者其他方式直接发起http请求,后端只好通过curl来
模拟这种请求,以便达到和前端相同的效果。
于是百度搜了一个php的curl方法,封装了一下:
public static function curl_post($url,$array){
$curl = curl_init();
//设置提交的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, );
//设置post数据
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($array));
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//获得数据并返回
return $data;
}
然后就愉快地调用了:
$array = array('open_id'=>$openid);
$url = dr_var("verify");
$res = $this->curl_post($url,$array);
这里是在B系统接口里面模拟请求了A系统的一个verify接口,用来审核用户身份,然后根据审核结果决定B系统
接口向外返回什么。
最后跑B系统接口的时候,却发现,返回的除了B系统接口返回值之外,还夹杂着A系统接口(verify)的返回值,
一时间很是不解,到处看verify接口返回值那里出了什么错,exit(json_encode(array("a"=>a)))不奏效,于是换成
return array("a"=>a);还是不奏效,又换成var_dump(array("a"=>a));还是不行!!!依旧返回两个接口的返回值。
后来,后来,一句一句地调试封装的curl函数,发现上面红字那块就已经将verify接口的值直接打印出来了,
于是百度关键字:curl 不直接输出;哗啦啦,出来一大串相关信息,随便打开一条,找到了答案,原来是curl少
设置了一个参数:
//获取数据不直接输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, );
最终问题解决了,也算是get到了php的curl参数设置的一个小知识点~~~
php之接口内curl请求其他接口的更多相关文章
- PHP Curl请求Https接口
在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...
- php curl 请求api 接口
官方文档curl : http://www.runoob.com/php/php-ref-curl.html php开启curl : ① 打开 php.ini 文件 extension=php_c ...
- axios如何先请求A接口然后在请求B接口
总结:在第一个then的请求结束后,在添加一个then,表示请求第二个接口,在第二个then里面写第二个接口的请求方式 axios.get("./a.json").then(res ...
- php curl请求和获取接口数据
curl请求和获取接口数据 class ToolModel{ /** * [http 调用接口函数] * @Author GeorgeHao * @param string $url [接口地址] * ...
- php(curl请求)测试接口案例
请求测试接口,如下: $data = [']; $result = curlrequest($apiUrl,$data); ){ echo json_encode($result); }else{ e ...
- PHP封装curl的调用接口及常用函数
<?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $time ...
- Yii2通过curl调用json-rpc接口
Yii2可以通过json-rpc为前端提供接口数据,通常情况睛会使用异步的形式调用接口,有时也会使用curl调用接口数据. 一.异步调用json-rpc接口 $.ajax({ type: 'POST' ...
- curl模拟调用接口
curl模拟调用接口 1. get请求 curl -i -X GET http://url/bind/agentOnWork/v2?Sig=******* 2. post请求(带头信息以及参数) cu ...
- webapi+Task并行请求不同接口实例
标题的名称定义不知道是否准确,不过我想表达的意思就是使用Task特性来同时请求多个不同的接口,然后合并数据:我想这种场景的开发对于对接过其他公司接口的人不会陌生,本人也是列属于之内,更多的是使用最原始 ...
随机推荐
- 重置Linux普通账号和root账号密码
今天想在Linux测试下HTTPie, 突然发现虚拟机里面的Linux, root账号和普通账号密码都忘记了. 百度了半天发现答案都不对, 最后用Google搜到了答案. 本人系统环境: VMware ...
- 使用 10046 查看执行计划并读懂 trace 文件
查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划 ...
- ArcGIS COM Exception 0x80040228
问题: string shpDir = Path.GetDirectoryName(shpfile); string shpfilename = Path.GetFileNa ...
- clipboard
我们在网页上放置一个复制按钮,主要用来方便用户复制链接之类的复杂文本,以往的做法是,通过JS依靠Flash,甚至借助jQuery庞大的js库来实现文本复制到剪贴板的.今天我要给大家介绍的是一款极现代的 ...
- 开发者需要知道的iOS 12
总体概况 iOS 12总体来看是对现有iOS的一次改进,并没有太多突破性的功能或者框架,但是Apple在底层做了很多优化的工作,优化了性能,提供了更强大的安全性,增强了AR.Siri体验,让人工智能更 ...
- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- J.U.C之AQS
AQS是J.U.C的核心 AQS(AbstractQueuedSynchronizer)队列同步器,AQS是JDK下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架. 同步器 ...
- GIT使用—一些概念
(1)Git版本库(repository) 一个简单的数据库,包括所有用来维护与管理项目的修订版本和历史的信息. Git维护两个主要的数据结构: 对象库(object store)-在复制操作时能进行 ...
- ELK分布式日志收集搭建和使用
大型系统分布式日志采集系统ELK全框架 SpringBootSecurity1.传统系统日志收集的问题2.Logstash操作工作原理3.分布式日志收集ELK原理4.Elasticsearch+Log ...
- 网易编程题——Fibonacci数列
题目描述 Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0 ...