PHP调用接口API封装的例子


Posted in PHP onOctober 11, 2019

GET:

/**
 * 通过URL获取页面信息
 * @param $url 地址
 * @return mixed 返回页面信息
 */
function get_url($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//不输出内容
  $result = curl_exec($ch);
  curl_close ($ch);
  return $result;
}

POST:

/**
 * 模拟POST提交
 * @param string $url 地址
 * @param string $data 提交的数据
 * @return string 返回结果
 */
function post_url($url, $data) 
{
  $curl = curl_init(); // 启动一个CURL会话
  curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); // 模拟用户使用的浏览器
  //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  //curl_setopt($curl, CURLOPT_AUTOREFERER, 1);  // 自动设置Referer
  curl_setopt($curl, CURLOPT_POST, 1);       // 发送一个常规的Post请求
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);  // Post提交的数据包x
  curl_setopt($curl, CURLOPT_TIMEOUT, 30);     // 设置超时限制 防止死循环
  curl_setopt($curl, CURLOPT_HEADER, 0);      // 显示返回的Header区域内容
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  // 获取的信息以文件流的形式返回
 
  $tmpInfo = curl_exec($curl); // 执行操作
  if(curl_errno($curl)) 
 {
    echo 'Errno'.curl_error($curl);//捕抓异常
  }
  curl_close($curl); // 关闭CURL会话
  return $tmpInfo; // 返回数据
}

GET&&POST:

/**
 * CURL请求
 * @param $url 请求url地址
 * @param $method 请求方法 get post
 * @param null $postfields post数据数组
 * @param array $headers 请求header信息
 * @param bool|false $debug 调试开启 默认false
 * @return mixed
 */
function httpRequest($url, $method, $postfields = null, $headers = array(), $debug = false) {
  $method = strtoupper($method);
  $ci = curl_init();
  /* Curl settings */
  curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
  curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在发起连接前等待的时间,如果设置为0,则无限等待 */
  curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 设置cURL允许执行的最长秒数 */
  curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
  switch ($method) {
    case "POST":
      curl_setopt($ci, CURLOPT_POST, true);
      if (!empty($postfields)) {
        $tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
        curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);
      }
      break;
    default:
      curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求方式 */
      break;
  }
  $ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE;
  curl_setopt($ci, CURLOPT_URL, $url);
  if($ssl){
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
    curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
  }
  //curl_setopt($ci, CURLOPT_HEADER, true); /*启用时会将头文件的信息作为数据流输出*/
  curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的*/
  curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ci, CURLINFO_HEADER_OUT, true);
  /*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE带过去** */
  $response = curl_exec($ci);
  $requestinfo = curl_getinfo($ci);
  $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
  if ($debug) {
    echo "=====post data======\r\n";
    var_dump($postfields);
    echo "=====info===== \r\n";
    print_r($requestinfo);
    echo "=====response=====\r\n";
    print_r($response);
  }
  curl_close($ci);
  return $response;
  //return array($http_code, $response,$requestinfo);
}

实例:

$res =httpRequest($url,'post',$data);
$json_array = json_decode($res,true);
$data=$json_array['data']['admin_user_list'];
 
echo $data

以上这篇PHP调用接口API封装的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php header示例代码(推荐)
Sep 08 PHP
PHP通用检测函数集合
Feb 08 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
YII实现分页的方法
Jul 09 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
Yii框架上传图片用法总结
Mar 28 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 #PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 #PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 #PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 #PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 #PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 #PHP
laravel 判断查询数据库返回值的例子
Oct 11 #PHP
You might like
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python多线程使用方法实例详解
2019/12/30 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
机电工程专业应届生求职信
2013/10/03 职场文书
设计部经理的岗位职责
2013/11/16 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
取保候审保证书
2014/04/30 职场文书
工商干部先进事迹
2014/05/14 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技