<p>自行封装一个curl模拟浏览器请求的函数,如下:</p><pre class="brush:php;toolbar:false">/**
*curl模拟浏览器请求
*@paramunknown$url请求的地址
*@paramarray$params请求地址所需要的参数
*@paramstring$method请求的类型
*@paramarray$headershttp请求头
*@returnstring|mixed
*/
functioncurlRequest($url,array$params,$method='POST',array$headers=array())
{
//1.初始化一个curl会话资源
$ch=curl_init();
//2.设置curl会话的选项
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);//强制使用HTTP/1.0
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);//发起连接前等待超时的时间,如果设置为0,则无限等待
curl_setopt($ch,CURLOPT_TIMEOUT,30);//设置curl允许执行的最长秒数
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//是否将curl_exec()获取的信息返回,而不是直接输出
curl_setopt($ch,CURLOPT_ENCODING,'gzip');//设置HTTP请求头中"Accept-Encoding:"的值
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);//启用时会将服务器返回的"Location:"放在header中递归的返回给服务器
curl_setopt($ch,CURLOPT_MAXREDIRS,5);//设置HTTP重定向的最大数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//是否需要进行服务端的SSL证书验证
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//是否验证服务器SSL证书中的公用名
curl_setopt($ch,CURLOPT_HEADER,false);//是否抓取头文件的信息
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);//设置HTTP请求头
curl_setopt($ch,CURLINFO_HEADER_OUT,true);
switch(strtoupper($method)){
case'POST':
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
break;
case'GET':
$url="{$url}?".http_build_query($params);
break;
case'DELETE':
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'DELETE');
$url="{$url}?".http_build_query($params);
break;
default:
return'invalidrequestmethod';
}
curl_setopt($ch,CURLOPT_URL,$url);//设置需要请求的URL地址,也可以在curl_init()函数中设置
//3.执行curl会话
$response=curl_exec($ch);
//4.关闭curl会话,释放资源
curl_close($ch);
return$response;
}</pre><pre class="brush:php;toolbar:false">函数调用方式如下:
$url='http://demo.com/index.php';
$params=array('id'=>1,'name'=>'jack');
$res=curlRequest($url,$params);
echo$res;</pre>