PHP Curl得到403错误,但同一台机器的浏览器可以请求页面?

时间:2017-03-20 23:05:51

标签: php curl http-status-code-403

我的脚本通常没问题。我一般说,因为它从CNN.com,allrecipes.com,reddit.com等检索页面时 - 当我指向至少一个URL(foxnews.com)时,我得到403错误。

正如您所看到的,我已将用户代理设置为与我的机器浏览器相同(这是通过向Facebook的主页发送请求所必需的,该主页返回的消息是浏览器不受支持)。

所以,基本上想知道我需要采取哪些步骤才能让尽可能多的网站将CURL请求识别为来自真实的实际浏览器,而不是403。

    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $this->url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8');
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

1 个答案:

答案 0 :(得分:1)

Fox News似乎阻止通过USERAGENT的任何请求访问其网站。简单地删除USERAGENT字符串对我来说很好:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

希望这有帮助! :)