我可以在网站上成功抓取报纸网站,但今天却失败了。
但是我可以使用firefox成功访问网络。它恰好发生在卷曲中。这意味着它允许我的IP访问,并且它不被禁止。
以下是网络显示的错误
请启用Cookie。
错误1010 Ray ID:1a17d04d7c4f8888
拒绝访问
发生了什么事?
此网站的所有者(www1.hkej.com)已取消您的访问权限 在浏览器的签名上(1a17d04d7c4f8888-ua45)。
CloudFlare Ray ID:1a17d04d7c4f8888•您的IP:2xx.1x.1xx.2xx• 表演& CloudFlare的安全性
以下是我的代码:
$cookieMain = "cookieHKEJ.txt"; // need to use 2 different cookies since it will overwrite the old one when curl store cookie. cookie file is store under apache folder
$cookieMobile = "cookieMobile.txt"; // need to use 2 different cookies since it will overwrite the old one when curl store cookie. cookie file is store under apache folder
$agent = "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0";
// submit a login
function cLogin($url, $post, $agent, $cookiefile, $referer) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 100); // follow the location if the web page refer to the other page automatically
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Get returned value as string (don’t put to screen)
curl_setopt($ch, CURLOPT_USERAGENT, $agent); // Spoof the user-agent to be the browser that the user is on (and accessing the php script)
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); // Use cookie.txt for STORING cookies
curl_setopt($ch, CURLOPT_POST, true); // Tell curl that we are posting data
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Post the data in the array above
curl_setopt($ch, CURLOPT_REFERER, $referer);
$output = curl_exec($ch); // execute
curl_close($ch);
return $output;
}
$input = cDisplay("http://www1.hkej.com/dailynews/toc", $agent, $cookieMain);
echo $input;
如何使用curl成功假装浏览器?我错过了一些参数吗?
答案 0 :(得分:2)
正如我在帖子中所说,我可以使用firefox访问网络,我的IP不会被禁止。 最后,我从
更改代码后获得了成功$agent = "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0";
到
$agent = $_SERVER['HTTP_USER_AGENT'];
实际上,当用户代理:"用户代理:"时,我不知道为什么会失败。从昨天开始存在,但之前没事。
无论如何,谢谢大家。答案 1 :(得分:1)
用户使用Cloudflares安全功能来阻止您抓取他们的网站,很可能被展示为恶意机器人。他们将根据您的用户代理和IP地址完成此操作。
尝试更改您的IP(如果是家庭用户,请尝试重新启动路由器。有时会获得不同的IP地址)。尝试使用代理并尝试使用Curl发送不同的标头。
更重要的是,他们不希望人们抓取他们的网站并影响他们的流量等。你应该真的要求获得许可。