昨天说了,我尝试过在AJAX请求中修改User-Agent,但是似乎没有效果,在FireFox下Bookmarklet仍然无法获得正确的返回值。在FireFox的帮助论坛上找到《Firefox 3.6.13 ajax setRequestHeader(‘User-Agent’, ‘…’) don’t work》这个帖子,看来也有人跟我遇到同样的问题。
从帖子的链接一直跟进,就来到了w3.org关于XMLHttpRequest的描述:
3.6.2. The setRequestHeader() method
Terminate these steps if header is a case-insensitive match for one of the following headers:
Accept-Charset
Accept-Encoding
Connection
Content-Length
Cookie
Cookie2
Content-Transfer-Encoding
Date
Expect
Host
Keep-Alive
Referer
TE
Trailer
Transfer-Encoding
Upgrade
User-Agent
Via
Note: The above headers are controlled by the user agent to let it control those aspects of transport. This guarantees data integrity to some extent. Header names starting with Sec- are not allowed to be set to allow new headers to be minted that are guaranteed not to come from XMLHttpRequest.
紫色部分说,上面的消息头只能由浏览器控制,而不能用XMLHttpRequest对象来修改,即不能通过JavaScript修改。但是这也只是w3建议的标准而已,至于浏览器遵不遵循标准,那就得看开发人员了。
为了测试,先写一个ua.php,回显User-Agent:
echo $_SERVER['HTTP_USER_AGENT'];
?>
然后用jQuery发送ajax请求,并在发送之前用XMLHttpRequest对象的setRequestHeader方法修改User-Agent:
$.ajax({
type:"GET",
url:"ua.php",
success:function(data) {
alert(data);
},
beforeSend:function(xhr) {
xhr.setRequestHeader("User-Agent","uTorrent");
}
});
可以通过访问ua.html来进行测试,看看你的浏览器是否支持修改User-Agent。根据我的测试,IE还是跟往常一样无视标准的存在,可以用JavaScript在ajax请求中设置User-Agent,而FireFox和Chrome都无法修改User-Agent。这样看来,用JavaScript写一个六维空间流量作弊书签小工具也不是难事。
但是,昨天写的那个Bookmarklet就真的只能在IE下使用了,虽然可以写一个FireFox或者Chrome插件来解析115的下载地址。但是谁会为了区区一个网盘而大动干戈写一个浏览器插件呢?反正我没有那么闲,谁爱写谁写去。退一步讲,就算有人写了插件,又有谁会安装呢?下个解析工具还快点。
反正我很少用115网盘,要不是为了宠物小精灵,我才不会无聊到研究这种东西。然而,昨天还能下载的宠物小精灵,今天却弹出一个“视频文件禁止共享,请登录下载!”的错误,原来是“为加强知识产权的保护力度,营造健康有益的网络环境,115网盘暂时停止影视资源外链服务。”看来我得把阵地转移到还没有加强知识产权保护力度的电驴了。
随机文章:
这篇文章发布于 2011年03月31日,星期四,13:13,归类于 程序设计。您可以跟踪这篇文章的评论通过 RSS 2.0 feed。
您可以留下评论,或者从您的站点trackback。