该网站是阻止/忽略我的HTTP请求吗?

时间:2011-07-22 22:29:38

标签: php http curl

当我将cURL与代理一起使用时,我只能从网站上获取。没有代理的cURL和file_get_contents()什么都不返回(cURL HTTP代码“0”和curl_error() Empty reply from server)。我可以在没有代理的情况下获取其他网站。

除了被阻止之外,还有其他任何可能的解释,为什么我只能通过代理访问此网站?

3 个答案:

答案 0 :(得分:3)

您是否在cURL中设置了用户代理?如果您的用户代理未设置或您的HTTP请求看起来可疑,网站有时会阻止您。

在PHP中设置您的用户代理:

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

答案 1 :(得分:3)

这是来自你的工作场所还​​是什么?许多公司在共享PHP安装上禁用file_get_contents(),因为它非常危险。

该网站可能有用户代理检测。你可以在你的卷曲电话中假装,但我认为file_get_contents()不可能。网站使用的另一种方法是仅在设置cookie后才显示内容,以便网站管理员永远不会看到数据。

试试这个:

function curl_scrape($url,$data,$proxy,$proxystatus)
{
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    if ($proxystatus == 'on')
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    ob_start(); // prevent any output
    return curl_exec ($ch); // execute the curl command
    ob_end_clean(); // stop preventing output
    curl_close ($ch);
    unset($ch);
}

答案 2 :(得分:1)

我猜我真的被封锁了。现在使用代理,它工作正常。