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请求和获取接口数据的更多相关文章

  1. Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据

    当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...

  2. NodeJs本地搭建服务器,模拟接口请求,获取json数据

    最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...

  3. iOS开发之线程组解决请求多个接口数据,完成后,再刷新界面

    1.多任务请求接口,完成后,在刷新数据,常用方法 2018年07月18日 16:34:38 hbblzjy 阅读数:1382 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  4. Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面

    1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...

  5. PHP获取接口数据(模拟Get)

    当我们在做PHP开发的时候,很多时候需要对接口进行测试,或者更方便的调用一些已有模块的接口,取到结果并进行后续操作,我们可以通过curl进行模拟提交post和get请求,来去实现这些功能. 之后就可以 ...

  6. php(curl请求)测试接口案例

    请求测试接口,如下: $data = [']; $result = curlrequest($apiUrl,$data); ){ echo json_encode($result); }else{ e ...

  7. php – 通过curl从url获取JSON数据

    我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}.现在,我希望获得以上内容. 到目 ...

  8. Android -- 获取接口数据的三个方法

    1.   compile 'com.loopj.android:android-async-http:1.4.9': AsyncHttpClient client = new AsyncHttpCli ...

  9. AJAX 跨域请求 - JSONP获取JSON数据

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...

随机推荐

  1. 2018年秋季学期《c语言程序设计》助教总结

    <c语言程序设计>第七周助教总结 <c语言程序设计>第八周助教总结 <c语言程序设计>第九周助教总结 <c语言程序设计>第十周助教总结 <c语言程 ...

  2. Mac新手必看教程—让你离熟练操作mac只差十分钟

    本文收录于:风云社区(提供各类mac软件资源下载) 本文源自:什么值得买 无论轻薄办公本.还是赶超台式性能的游戏本,关注#笔记本攻略#栏目,解决笔记本电脑从选购到使用的各种问题. 引子 大部分用户接触 ...

  3. Prometheus-配置解析

    1.Prometheus整体架构图 2.配置文件 # 全局配置 global: scrape_interval: 15s # 多久 收集 一次数据 evaluation_interval: 30s # ...

  4. Python实现聚类算法AP

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  5. NTFS权限笔记 2017-12-4

    NTFS权限:(文件或文件夹右键属性--安全--ACL) 1.文件系统类型: NTFS:支持单个文件大于4个G,支持文件权限设置 FAT32:不支持单个文件大于4G,不支持文件权限设置 2.取消权限继 ...

  6. MySQL学习8 - 数据的增删改

    一.介绍 二.插入数据 INSERT 三.更新数据UPDATE 四.删除数据DELETE 一.介绍 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现 ...

  7. Linux性能工具图册-便于查阅

    该图表示了,Linux系统哪种问题用哪种工具

  8. 大数据基础-2-Hadoop-1环境搭建测试

    Hadoop环境搭建测试 1 安装软件 1.1 规划目录 /opt [root@host2 ~]# cd /opt [root@host2 opt]# mkdir java [root@host2 o ...

  9. jdk1.8新特性 lambda表达式和Stream

    一.Lambda 1.lambda : 匿名函数 2.好处:减少打码的冗余,增强匿名函数的可读性 3.语法格式 语法格式一 : 无参数,无返回值 () -> System.out.println ...

  10. C#学习笔记-域用户认证(一)

    public Boolean ValidateDomainUser(string Domain, string UserName, string Password) { DirectoryEntry ...