欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  PHP用curl调用接口API的方法和举例

PHP学习 本站 276 0评论

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


如:http://localhost/operate.php?act=get_user_list&type=json

在这里operate.php相当于一个接口,其中get_user_list 是一个API(获取用户列表),讲求返回的数据类型为JSON格式。


你只需要在你PHP代码中执行这条链接他就会返回。

class Action

{

     /**  get

     * 通过URL获取页面信息

     * @param $url

     * @return mixed 返回页面信息

     */

    public static function curl_get($url){

 

           $ch = curl_init();  

           curl_setopt($ch, CURLOPT_URL, $url);  //设置访问的url地址

    curl_setopt($ch, CURLOPT_TIMEOUT, 5);  //超时时间

           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//参数为1表示传输数据,为0表示直接输出显示。

           curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

           curl_setopt($ch, CURLOPT_HEADER,0);//参数为0表示不带头文件,为1表示带头文件

           //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

           //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

   curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 60); // 缓存(单位:秒)

           $output = curl_exec($ch); 

           curl_close($ch); 

           return $output;

     }

    

     /**  post

     * url:访问路径

     * array:要传递的数组

     */

    public static function curl_post($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; // 返回数据

    }


   //之后就可以通过CURL::curl_post($url,$array)或者CURL::curl_get($url);的方式调用接口并得到数据了。


   /** 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

}


参考文章:

https://recomm.cnblogs.com/blogpost/6905120 

https://www.cnblogs.com/wanghuaijun/p/5497085.html 

https://www.cnblogs.com/wicub/p/6737723.html 

https://segmentfault.com/a/1190000010873975


转载请注明: ITTXX.CN--分享互联网 » PHP用curl调用接口API的方法和举例

最后更新:2020-06-11 16:52:01

赞 (3) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽