在curl里可以设置UA
<?php//client
$ch = curl_init()
curl_setopt_array($ch,
array(
CURLOPT_URL => 'http://localhost/ua.php',
CURLOPT_USERAGENT => "YeRenChai_v1.0",
CURLOPT_RETURNTRANSFER => True,
CURLOPT_FOLLOWLOCATION => True,
)
)
$response = curl_exec($ch)
if(!$response) exit(curl_error($ch))
var_dump($response)
?> <?php //server
echo $_SERVER['HTTP_USER_AGENT']
?>
file_get_contents 和 curl 这俩强悍的函数,在远程抓取时候相当有用处。不过一些网站会根据来访ip是否携带user_agent来判断是正常的浏览器客户端还是机器。所以,我们的任务就是给他们伪造user_agent。file_get_contents伪造user_agent 方法如下:
ini_set('user_agent','Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.1SV1.NET CLR 2.0.50727http://www.baidu.com)')
curl伪造user_agent的方法:
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.1SV1.NET CLR 2.0.50727http://www.baidu.com)')
附带上curl的完整函数方法:
function curl_get_file_contents($URL)
{
$c = curl_init()
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1)
//curl_setopt($c, CURLOPT_HEADER, 1)//输出远程服务器的header信息
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.1SV1.NET CLR 2.0.50727http://www.baidu.com)')
curl_setopt($c, CURLOPT_URL, $URL)
$contents = curl_exec($c)
curl_close($c)
if ($contents) {return $contents}
else {return FALSE}
}
这样就可以抓取了,user_agent是可以自己修改的。
而是你服务器上的程序去访问其他网络页面时的USER_AGENT。别人网站有些为了防止非浏览器的访问,防止被采集,就会做浏览器检测,检测user_agent.
如果你不伪装,不设就采集不到了。
通常的访问是浏览器->网站,网站获得的是你的浏览器信息。
而你如果用些fopen,file_get_contents,socket之类的访问别人网站就是
对方的网站如果分析user_agent,发现是php,可能禁止你获取。
这时候你可以修改user_agent来伪造成浏览器请求。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)