当我运行此命令时:
wget --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" http://yahoo.com
...我得到了这个结果(文件中没有其他内容):
<!-- hw147.fp.gq1.yahoo.com uncompressed/chunked Wed Jun 19 03:42:44 UTC 2013 -->
但是当我运行wget http://yahoo.com
而没有--user-agent
选项时,我会获得整页。
用户代理与我当前浏览器发送的标头相同。为什么会这样?有没有办法确保在使用wget时不会阻止用户代理?
答案 0 :(得分:71)
在User-Agent
标头设置为Accept
的情况下,雅虎服务器似乎根据*/*
进行了一些启发式验证。
接受:text / html
为我做了诀窍。
e.g。
wget --header="Accept: text/html" --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" http://yahoo.com
注意:如果您没有声明Accept
标题,那么wget
会自动添加Accept:*/*
,这意味着可以为您提供任何内容。
答案 1 :(得分:34)
我创建了一个~/.wgetrc
文件,其中包含以下内容(从askapache.com获取,但使用较新的用户代理,因为否则它始终不起作用):
header = Accept-Language: en-us,en;q=0.5
header = Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
header = Connection: keep-alive
user_agent = Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0
referer = /
robots = off
现在我可以从大多数(全部?)文件共享(流媒体视频)网站下载。
答案 2 :(得分:1)
您需要同时设置用户代理和引用:
wget --header="Accept: text/html" --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" --referrer connect.wso2.com http://dist.wso2.org/products/carbon/4.2.0/wso2carbon-4.2.0.zip