使用UserAgent时出现Curl 400错误

时间:2012-03-06 21:18:17

标签: php http curl user-agent

为什么我有时会遇到这个错误?

**Bad Request**

Your browser sent a request that this server could not understand.
Apache Server at control.digitalcoding.com Port 80

何时

$UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11";

一切正常,但不是

Opera / 7.52(Windows NT 5.1; U)[en] Mozilla / 5.0(Windows; U; Windows NT 5.1; rv:1.7.3)Gecko / 20041001 Firefox / 0.10.1 Mozilla / 5.0(Windows NT 6.1; rv:10.0.1)Gecko / 20100101 Firefox / 10.0.1

例如,

。有什么问题?

HtmlReciever.php

<?php
if(empty($_GET["Link"]))
{
    echo "empty";
    die;
}
$LinkToFetch = urldecode($_GET["Link"]);
$UserAgent = urldecode($_GET["UserAgent"]);


function iscurlinstalled() 
{
    if  (in_array  ('curl', get_loaded_extensions())) 
    {
        return true;
    }
    else
    {
        return false;
    }
}

// If curl is instaled
if(iscurlinstalled()==true)
{
    $ch = curl_init($LinkToFetch);
    curl_setopt($ch, CURLOPT_USERAGENT,$UserAgent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    $HtmlCode = curl_exec($ch);
    curl_close($ch);
}
else
{

    $HtmlCode = file_get_contents($LinkToFetch);
}

echo $HtmlCode;
?>

我必须说我正在运行另一个.php的RecieverHtml.php和GET这样

http://127.0.0.1/reciever/RecieverHtml.php?Link=http%3A%2F%2Fwww.digitalcoding.com%2Ftools%2Fdetect-browser-settings.html&UserAgent=Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A10.0.1%29+Gecko%2F20100101+Firefox%2F10.0.1%0D%0A

1 个答案:

答案 0 :(得分:2)

这取决于您的请求发送到的服务器。如果服务器检查用户代理并且仅允许与通用浏览器用户代理的有限/不完整/过时列表匹配的请求,则服务器可能返回通用400状态代码。

如果您无法控制服务器并希望脚本正常工作,请使用有效的用户代理并忘记其他用户代理。无论如何,您提供请求的用户代理是“错误的”,因为Chrome不是执行实际请求,而是您的服务器运行PHP脚本。

编辑: 您还可以使用以下代码传递请求PHP脚本的浏览器的用户代理:

curl_setopt($ch, CURLOPT_USERAGENT, $_REQUEST['HTTP_USER_AGENT']);

请记住,该值可能为空或异国情调(例如.Lynx / 2.8.8dev.3 libwww-FM / 2.14 SSL-MM / 1.4.1),并被服务器拒绝。