<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=&#39;POST&#39;,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,&#39;gzip&#39;);//设置HTTP请求头中&quot;Accept-Encoding:&quot;的值 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);//启用时会将服务器返回的&quot;Location:&quot;放在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&#39;POST&#39;: curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$params); break; case&#39;GET&#39;: $url=&quot;{$url}?&quot;.http_build_query($params); break; case&#39;DELETE&#39;: curl_setopt($ch,CURLOPT_CUSTOMREQUEST,&#39;DELETE&#39;); $url=&quot;{$url}?&quot;.http_build_query($params); break; default: return&#39;invalidrequestmethod&#39;; } 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=&#39;http://demo.com/index.php&#39;; $params=array(&#39;id&#39;=&gt;1,&#39;name&#39;=&gt;&#39;jack&#39;); $res=curlRequest($url,$params); echo$res;</pre>
T:0.004557s,M:238.2 KB
返回顶部 留言