PHP卷曲网络爬行突然失败

时间:2014-12-31 17:02:58

标签: php curl web-crawler cloudflare

我可以在网站上成功抓取报纸网站,但今天却失败了。

但是我可以使用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成功假装浏览器?我错过了一些参数吗?

2 个答案:

答案 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发送不同的标头。

更重要的是,他们不希望人们抓取他们的网站并影响他们的流量等。你应该真的要求获得许可。