zoukankan      html  css  js  c++  java
  • php使用curl实现get和post请求的方法,数据传输urldecode和json

    PHP支持CURL库,利用URL语法规定来传输文件和数据的工具,支持很多协议,包括HTTP、FTP、TELNET等.

    优点:是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS.CURL可以根据URL前缀是'HTTP'还是'HTTPS'自动选择是否加密发送内容.还可以解决跨域问题等.

    PHP建立CURL请求的基本步骤:

    1:初始化
    curl_init()
    2:设置curl选项
    curl_setopt()
    3:执行并获取结果
    curl_exec()
    4:关闭释放资源
    curl_close()

    curl抓取百度网站示例demo:

     1  <?php
     2 //初始化curl资源
     3 $ch = curl_init();
     4 
     5 //设置URL和相应的选项
     6 curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");
     7 //设置头文件的信息作为数据流输出
     8 curl_setopt($ch, CURLOPT_HEADER, 1);
     9 
    10 //执行命令,并获取结果
    11 curl_exec($ch);
    12 
    13 //关闭curl资源,释放系统资源
    14 curl_close($ch);

    项目中比较常用到的是对回调数据接口处理.封装的方法支持post和get请求方法.数据传输包含urldecode和json.

      1 <?php
      2 class HttpClient
      3 {
      4     /*
      5      *get请求  urldecode数据传输(支持http和https)
      6      *@param   $url接口地址   string
      7      *@param   $headers请求报文头body数据  array
      8      *@return  type
      9      * */
     10     public static function get($url, $headers = array())
     11     {
     12         $ch = curl_init(); //初始化
     13         if (strpos($url, 'https') === 0) 
     14         {
     15             //当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
     16             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //https请求 不验证证书和hosts
     17             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     18         }
     19         if (!empty($headers)) 
     20         {
     21             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
     22         }
     23         curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
     24         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
     25         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
     26         curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒)
     27 
     28         $outPut = curl_exec($ch); //执行命令,并获取结果
     29         curl_close($ch); //关闭curl资源,释放系统资源
     30         
     31         return $outPut;
     32     }
     33 
     34     /*
     35      *post请求  urldecode数据传输(支持http和https)
     36      *@param    $url接口地址   string
     37      *@param    $data接口参数  array
     38      *@param    $headers请求报文头body数据  array
     39      *@return   type
     40      * */
     41     public static function post($url, array $data, $headers = array())
     42     {
     43         $ch = curl_init(); //初始化
     44         if (strpos($url, 'https') === 0) {
     45             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     46             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     47         }
     48         if (!empty($headers)) 
     49         {
     50             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
     51         }
     52 
     53         curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
     54         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
     55         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
     56         curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒)
     57         curl_setopt($ch, CURLOPT_POST, 1); //设置post方式提交
     58         //注意: 传递一个URL-encoded字符串,数据会被编码成 application/x-www-form-urlencoded,传递一个数组到CURLOPT_POSTFIELDS,curl会把数据编码成 multipart/form-data
     59         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
     60 
     61         $outPut = curl_exec($ch); //执行命令,并获取结果
     62         curl_close($ch); //关闭curl资源,释放系统资源
     63 
     64         return $outPut;
     65     }
     66 
     67     /*
     68      *post请求  json数据传输(支持http和https)
     69      *@param    $url接口地址   string
     70      *@param    $data接口参数  array或json_encode过的数据
     71      *@return   type
     72      * */
     73     public static function postJson($url, $data)
     74     {
     75         if (is_array($data)) {
     76             $data = json_encode($data);
     77         }
     78 
     79         $ch = curl_init();
     80         if (strpos($url, 'https') === 0) {
     81             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     82             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     83         }
     84 
     85         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     86             'Content-Type: application/json; charset=utf-8',
     87             'Content-Length: ' . strlen($data)
     88                 )
     89         );
     90         curl_setopt($ch, CURLOPT_URL, $url);
     91         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     92         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
     93         curl_setopt($ch, CURLOPT_TIMEOUT, 4);
     94         curl_setopt($ch, CURLOPT_POST, 1);
     95         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     96 
     97         $outPut = curl_exec($ch);
     98         curl_close($ch);
     99 
    100         return $outPut;
    101     }
    102 }

    请求get和post方法实例:

     1 //GET请求方法
     2 $params = [
     3     'id' => 1,
     4     'token' => '****'
     5 ];
     6 $query = http_build_query($params);
     7 $url = 'http://url地址' . '?' . $query;
     8 $res = HttpClient::get($url);
     9 $data = json_decode($res, true);
    10 
    11 
    12 //POST请求方法
    13 $params = [
    14     'id' => 1,
    15     'token' => '****'
    16 ];
    17 $url = 'http://url地址';
    18 $res = HttpClient::post($url, $params);
    19 $data = json_decode($res, true);
  • 相关阅读:
    C++ *和&
    leetcode 338. Bit位计数
    leetcode 216. 组合总和 III
    leetcode 40. 组合总和 II
    c++ vector 常用函数
    leetcode 491. 递增子序列
    leetcode 441. 排列硬币
    leetcode 258. 各位相加
    leetcode 415. 字符串相加
    leetcode 67. 二进制求和
  • 原文地址:https://www.cnblogs.com/cxx8181602/p/8330819.html
Copyright © 2011-2022 走看看