Ошибка Curl 400 при использовании UserAgent - PullRequest
1 голос
/ 07 марта 2012

Почему я иногда получаю эту ошибку?

**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) [ru] 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; версия 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;
?>

Я должен сказать, что я запускаю RecieverHtml.php из другого .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 Ответ

2 голосов
/ 07 марта 2012

Это зависит от сервера, на который отправлен ваш запрос.Если сервер проверяет пользовательский агент и разрешает только запросы, которые соответствуют ограниченному / неполному / устаревшему списку распространенных пользовательских агентов браузера, сервер может вернуть общий код состояния 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) и будут отклонены сервером.

...