使用UserAgent时出现Curl 400错误
问题描述:
为什么我有时会出现这个错误?使用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与得到这样
答
这取决于服务器上的请求被发送到。如果服务器检查用户代理并仅允许匹配常见浏览器用户代理的有限/不完整/过时列表的请求,则服务器可能会返回通用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)并被服务器拒绝。
那么,您是否说我需要在Chrome中才能使用该脚本?这是不好的..以及如何通过修改我的脚本/服务器“欺骗”UserAgent?我有完全访问权限。 – Master345 2012-03-06 23:14:25
@RowMinds:你不需要在Chrome中“成为”。当你通过上面提到的用户代理(工作的那个)时,你实际上假装是Chrome,甚至认为你是一个PHP脚本。您可以通过仅使用Chrome发送的代理(如您已经做的),Firefox或任何您需要的浏览器来欺骗用户代理。查看我的更新答案以获取更多详情。 – CodeZombie 2012-03-06 23:25:10