个人将归纳curl请求总结成三步
1、创建curl 句柄(curl_init),并设置参数(curl_setopt)(打开冰箱)
2、执行请求(curl_exec),处理返回的数据 (把大象塞进去)
3、关闭curl(curl_close),释放所有资源(关上冰箱)
其实如果代码看起来比较复杂,复杂的地方可能就是在处理返回数据的逻辑。
二、curl_setopt
故名思议,setoption 设置参数,其中囊括的参数较多,这里只是简单提取常用的几个,如需查看更多参数,点击这里,常见的设置ua、cookie、https等
bool curl_setopt ( , int , "user-agent: ""referer: " 禁止 curl 验证对等证书(peer'
如需返回的header头,自行添加
curl_setopt($curl, curlopt_header, 1);
判断返回的状态码:
curl_getinfo(, curlinfo_http_code) if(curl_getinfo($curl, curlinfo_http_code) == '200')
简单版的get请求如下,下面以请求百度为例,只设置了最基本的属性:
=, curlopt_url, 'http://www.baidu.com', curlopt_header, 1, curlopt_returntransfer, 1 = curl_exec((); ?>
稍微复杂的设置了ua、cookie等,https请求中才需要只用的ssl证书校验,http请求中可不用,如果需要请求有规律的地址,类似https://example.com/?id=$i,修改for循环即可。
<?php class getrequest { const sua = 'mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; .net clr 1.1.4322)'; const surl = 'https://www.baidu.com'; const scookie = 'fake if you want'; function vinitrequest() { $curl = curl_init(); curl_setopt($curl, curlopt_header, self::sua); curl_setopt($curl, curlopt_cookie, self::scookie); curl_setopt($curl, curlopt_returntransfer, 1); /* * ssl check,use for https url */ curl_setopt($curl, curlopt_ssl_verifypeer, 0); curl_setopt($curl, curlopt_ssl_verifyhost, 1);// for ($iid = 1; $iid < 1000; $iid++) { // $surl = self::surl.$iid; curl_setopt($curl, curlopt_url, self::surl); $this->sexecrequest($curl);// } } function sexecrequest($curl) { $sret = curl_exec($curl); print_r($sret); /** * handle your response * stripos or preg */ curl_close($curl); } }$foo = new getrequest();$foo->vinitrequest();?>
三、分离response里面的 header和body
首先要显示header信息需要设置,如下设置即可取到header和body,当然还有其他方法大同小异
curl_setopt($curl, curlopt_header, 1);list($sheader, $sbody) = explode("\r\n\r\n", $sret, 2);
完整代码:
<?php class getrequest { const sua = 'mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; .net clr 1.1.4322)'; const surl = 'https://www.baidu.com'; const scookie = 'fake if you want'; function vinitrequest() { $curl = curl_init(); $i = 0; curl_setopt($curl, curlopt_header, self::sua); curl_setopt($curl, curlopt_cookie, self::scookie); curl_setopt($curl, curlopt_returntransfer, 1); curl_setopt($curl, curlopt_header, 1); curl_setopt($curl, curlopt_ssl_verifypeer, 0); curl_setopt($curl, curlopt_ssl_verifyhost, 1); curl_setopt($curl, curlopt_url, self::surl); $this->sexecrequest($curl); } function sexecrequest($curl) { $sret = curl_exec($curl); // if (curl_getinfo($curl, curlinfo_http_code) == '200') { list($sheader, $sbody) = explode("\r\n\r\n", $sret, 2); // } print_r($sheader); print_r($sbody); // curl_close($curl); } }$foo = new getrequest();$foo->vinitrequest();?>
四、post请求
post请求无非比上述get请求多设置了两个参数。
1、嘿,我要用post提交数据了。
2、我post的数据的内容
curl_setopt($curl, curlopt_post, 1); curl_setopt($curl, curlopt_postfields, array('user'=>'test'));
简单版如下:
<?php$curl = curl_init(); curl_setopt($curl, curlopt_url, 'http://www.baidu.com'); curl_setopt($curl, curlopt_header, 1); curl_setopt($curl, curlopt_returntransfer, 1); curl_setopt($curl, curlopt_post, 1);$apostdata = array( 'username' => 'test', .....); curl_setopt($curl, curlopt_postfields, $apostdata);$sdata = curl_exec($curl); curl_close($curl);var_dump($sdata);?>
以上就是php之curl get post请求用法实例分享的详细内容。
