2012-03-06 153 views
1

为什么我有时会出现这个错误?使用UserAgent时出现Curl 400错误

**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"; 

一切工作正常,但不能与

歌剧院/ 7.52(的Windows NT 5.1; U)[英文] 的Mozilla/5.0(窗口; 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与得到这样

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

回答

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)并被服务器拒绝。

+0

那么,您是否说我需要在Chrome中才能使用该脚本?这是不好的..以及如何通过修改我的脚本/服务器“欺骗”UserAgent?我有完全访问权限。 – Master345 2012-03-06 23:14:25

+0

@RowMinds:你不需要在Chrome中“成为”。当你通过上面提到的用户代理(工作的那个)时,你实际上假装是Chrome,甚至认为你是一个PHP脚本。您可以通过仅使用Chrome发送的代理(如您已经做的),Firefox或任何您需要的浏览器来欺骗用户代理。查看我的更新答案以获取更多详情。 – CodeZombie 2012-03-06 23:25:10

相关问题