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 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
PHP写的简单数字验证码实例
May 23 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
PHP7 弃用功能
Mar 09 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服务器实现多session并发运行
2006/10/09 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
phpfpm的作用和用法
2019/10/10 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
对Python中type打开文件的方式介绍
2018/04/28 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
小班开学寄语
2014/04/04 职场文书
金融管理专业求职信
2014/07/10 职场文书
党支部书记岗位职责
2015/02/15 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
九年级语文教学反思
2016/03/03 职场文书
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js