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);

 

posted @ 2018-01-22 19:49  echo曦  阅读(1167)  评论(0编辑  收藏  举报