php curl请求和获取接口数据
curl请求和获取接口数据
class ToolModel{
/**
* [http 调用接口函数]
* @Author GeorgeHao
* @param string $url [接口地址]
* @param array $params [数组 || json字符串] (GET提交方式的传入$params必须是数组),(POST 提交方式的传入 $params 必须是json字符串形式)
* @param string $method [GET\POST\DELETE\PUT]
* @param array $header [HTTP头信息]
* @param integer $timeout [超时时间]
* @return [type] [接口返回数据]
*/
public static function restCall($url, $params, $method = 'GET', $header = array(), $timeout = 10000){
// POST 提交方式的传入 $set_params 必须是字符串形式
$opts = array(
CURLOPT_TIMEOUT => $timeout,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HEADER => true,
CURLOPT_NOBODY => false,
CURLOPT_HTTPHEADER => $header
); /* 根据请求类型设置特定参数 */
switch (strtoupper($method)) {
case 'GET':
if(empty($params)){
$opts[CURLOPT_URL] = $url;
} else {
$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
}
break;
case 'POST':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'UPLOAD':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'DOWNLOAD':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'DELETE':
if(empty($params)){
$opts[CURLOPT_URL] = $url;
} else {
$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
}
// $opts[CURLOPT_URL] = $url;
$opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
$opts[CURLOPT_POSTFIELDS] = $params;
break;
case 'PUT':
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 0;
$opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
$opts[CURLOPT_POSTFIELDS] = $params;
break;
default:
echo "不支持的请求方式!";
break;
} /* 初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
// var_dump($error);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != '200') {
echo "<br/>http请求错误。";
}
// 根据请求方式判断是否返回头部消息
switch (strtoupper($method)) {
case 'GET':
//除去header消息
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headerData = substr($data, 0, $headerSize);
$bodyData = substr($data, $headerSize);
return $bodyData;
break;
case 'POST':
//除去header消息
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headerData = substr($data, 0, $headerSize);
$bodyData = substr($data, $headerSize);
return $bodyData;
break;
case 'UPLOAD':
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headerData = substr($data, 0, $headerSize);
$bodyData = substr($data, $headerSize);
return $bodyData;
break;
case 'DOWNLOAD':
return $data;
break;
case 'DELETE':
return $data;
break;
case 'PUT':
return $data;
break;
default:
echo "不支持的请求方式!";
break;
}
return $data;
}
/**
* json数据强制转字符串类型
* @param array $array 待转换的数组
* @return string 转换后的json字符串
* @author chunkuan <urcn@qq.com>
*/
public static function json_encode_s($array){
foreach($array as &$v){
$v = (string) $v;
}
return json_encode($array);
}
}
请求数据:
$params["userId"]=1;
$params["pageNo"]=1;
$params["pageSize"]=20;
$jsonhttp_data = ToolModel::json_encode_s($params);
$headermsg = array(
'Content-Type:application/json;charset=UTF-8',
'Connection:Keep-Alive',
'Content-Length: ' . strlen($jsonhttp_data)
);
$a = ToolModel::restCall("http://10.6.3.141:8010/orders",$params,"GET",$headermsg,10);
$obj = json_decode($a,TRUE);
$data = $obj['data'];
php curl请求和获取接口数据的更多相关文章
- Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据
当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...
- NodeJs本地搭建服务器,模拟接口请求,获取json数据
最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...
- iOS开发之线程组解决请求多个接口数据,完成后,再刷新界面
1.多任务请求接口,完成后,在刷新数据,常用方法 2018年07月18日 16:34:38 hbblzjy 阅读数:1382 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面
1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...
- PHP获取接口数据(模拟Get)
当我们在做PHP开发的时候,很多时候需要对接口进行测试,或者更方便的调用一些已有模块的接口,取到结果并进行后续操作,我们可以通过curl进行模拟提交post和get请求,来去实现这些功能. 之后就可以 ...
- php(curl请求)测试接口案例
请求测试接口,如下: $data = [']; $result = curlrequest($apiUrl,$data); ){ echo json_encode($result); }else{ e ...
- php – 通过curl从url获取JSON数据
我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}.现在,我希望获得以上内容. 到目 ...
- Android -- 获取接口数据的三个方法
1. compile 'com.loopj.android:android-async-http:1.4.9': AsyncHttpClient client = new AsyncHttpCli ...
- AJAX 跨域请求 - JSONP获取JSON数据
Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...
随机推荐
- Kubernetes集群调度器原理剖析及思考
简述 云环境或者计算仓库级别(将整个数据中心当做单个计算池)的集群管理系统通常会定义出工作负载的规范,并使用调度器将工作负载放置到集群恰当的位置.好的调度器可以让集群的工作处理更高效,同时提高资源利用 ...
- Redis扩展机制
Redis扩展机制扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Redis的Avalibility解决方案有很多,比如Twemproxy,Codis, 一.Twempro ...
- 分布式监控系统开发【day38】:监控trigger表结构设计(一)
一.需求讨论 1.zabbix触发器的模板截图 1.zabbix2.4.7 2.zabbix3.0 2.模板与触发器关联的好处 好处就是可以批量处理,比如我说我有1000机器都要监控cpu.内存.IO ...
- 类型和原生函数及类型转换(二:终结js类型判断)
typeof instanceof isArray() Object.prototype.toString.call() DOM对象与DOM集合对象的类型判断 一.typeof typeof是一个一元 ...
- PYthon3:函数实现“自动售卖机”功能
题目: 自动贩卖机: # 只接受1元.5元.10元的纸币或硬币,可以1块,5元,10元.# 饮料只有橙汁.椰汁.矿泉水.早餐奶,售价分别是3.5,4,2,4.5# 写一个函数用来表示贩卖机的功能:用户 ...
- 关于stm32的数据类型
常见的uint16_t.uint32_t.u8.u16等 定义在stm32f10x.h文件中,这个文件是定义相关数据类型和结构体的头文件.
- Linux进程组调度机制分析【转】
转自:http://oenhan.com/task-group-sched 又碰到一个神奇的进程调度问题,在系统重启过程中,发现系统挂住了,过了30s后才重新复位,真正系统复位的原因是硬件看门狗重启的 ...
- mvc路由配置.html结尾的伪静态
mvc 标准的写法 通常是(http://localhost:8149/Home/Index) 路由配置如下: 有时候需求 如 http://localhost:8149/Home/Index 改为h ...
- 【easy】110. Balanced Binary Tree判断二叉树是否平衡
判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...
- jxl应用事例
实例中主要目的是解析jxl使用流程以及jxl绘制Excel的写法思路,代码掩去了项目中的真实数据,请根据需求酌情修改,如果有帮助到有需要的人,不胜欢喜. Dao层为查询数据库,返回list数据,此处省 ...