900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > php使用curl实现get和post请求的方法 数据传输urldecode和json

php使用curl实现get和post请求的方法 数据传输urldecode和json

时间:2019-05-14 14:41:51

相关推荐

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, "/"); 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* */ 10public 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资源,释放系统资源 3031 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* */ 41public 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* */ 73public 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);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。