当网站需要启用Cookie时,PHP CURL请求失败

时间:2014-06-28 13:43:15

标签: php html redirect cookies curl

我试图从纽约时报网站上的新闻文章中获取元数据,特别是http://www.nytimes.com/2014/06/25/us/politics/thad-cochran-chris-mcdaniel-mississippi-senate-primary.html

每当我尝试但是我会从视线中获得重定向,因为我的“浏览器”不接受cookie。我已启用curl选项以保存Cookie,并尝试在其他一些StackOverflow问题(hereherehere)中遵循接受的答案,而答案在这些网站上有效似乎没有在nytimes网站上工作。

我目前的php curl函数如下所示:

function get_extra_meta_tags_curl($url) {
    $ckfile = tempnam("/public_html/commentarium/", "cookies.txt");

    $ch = curl_init($main_url);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $output = curl_exec($ch);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $output = curl_exec($ch);
    curl_close($ch);

    echo $output;
}

问题似乎是当我请求URL时,nytimes.com检查浏览器是否接受cookie。在使用REFUSE_COOKIE_ERROR重定向到登录页面之前,我检查了几次。您可以在我的测试页here上看到它,而不是在此处发布完整的重定向列表,以及最终重定向返回的原始html以及我当前的get_extra_meta_tags_curl函数在 CURL测试 <下返回的内容/ p>

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您以错误的方式启用Cookie自动处理。 CURLOPT_COOKIEJAR仅允许cookie保存(存储),但您还需要启用cookie加载并通过请求传递它们(通过CURLOPT_COOKIEFILE选项)。否则cookie自动处理将无法工作,您将体验到“浏览器不接受cookie”问题。

因此,您必须在每个 CURL请求中将CURLOPT_COOKIEJARCURLOPT_COOKIEFILE选项设置为相同的值($ckfile):

...
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
...