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 第二节 数据类型之数组
Apr 28 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
深入理解php printf() 输出格式化的字符串
May 23 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
CI框架附属类用法分析
Dec 26 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
php操作redis命令及代码实例大全
Nov 19 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
django实现分页的方法
2015/05/26 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
UNIX文件系统分类
2014/11/11 面试题
运动会领导邀请函
2014/01/10 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
企业员工集体活动方案
2014/08/17 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
慰问信格式
2015/02/14 职场文书
先进个人总结范文
2015/02/15 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书