最近在做一个蜘蛛项目,发现在抓取数据时,有时会碰到301的页面,原本写的curl_init函数php7-远程获取api接口或网页内容,直接无法抓取301跳转后的页面,因此对原本的函数进行了一下优化,现在可以直接抓取301跳转后的数据。
function http_request_json($url,$post_data = NULL)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if (isset($post_data)){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS,20);
$result[1] = curl_exec($ch);
$result[0]= curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
ksort($result);
return $result;
}
//函数中加入下面这条语句可以抓取301后的页面
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 最多跳转20次
curl_setopt($ch, CURLOPT_MAXREDIRS,20);
无论是GET提交数据还是POST提交数据,都可以直接调用这个函数,比以前更方便了。