我尝试使用wget
和下载文件,curl
但因 403 错误(禁止)而被拒绝。
我可以在同一台机器上使用网络浏览器查看文件。
我再次尝试使用通过http://www.whatsmyuseragent.com获得的浏览器的用户代理。我这样做:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
Run Code Online (Sandbox Code Playgroud)
和
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
Run Code Online (Sandbox Code Playgroud)
但它仍然被禁止。403 可能还有什么其他原因,我可以通过什么方式更改wget
和curl
命令来克服它们?
(这不是关于能够获取文件 - 我知道我可以从浏览器中保存它;这是关于理解为什么命令行工具的工作方式不同)
更新
感谢所有对这个问题的出色回答。我遇到的具体问题是服务器正在检查引用者。通过将其添加到命令行,我可以使用curl
和获取文件wget
。
检查引用者的服务器通过 302 跳转到另一个根本不执行检查的位置,因此该站点的curl
或wget
工作正常。
如果有人感兴趣,这是因为我正在阅读此页面以了解嵌入式 CSS,并试图以该站点的 css 为例。我遇到麻烦的实际 URL 是这个,curl
我最终得到的是
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Run Code Online (Sandbox Code Playgroud)
和 wget 是
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Run Code Online (Sandbox Code Playgroud)
很有意思。
Lek*_*eyn 46
HTTP 请求可能包含更多不是由 curl 或 wget 设置的标头。例如:
key=val
,您可以使用-b key=val
(或--cookie key=val
)选项设置它curl
。curl
这个选项是-e URL
和--referer URL
。curl
使用-u user:password
(或--user user:password
) 选项进行设置。Mozilla
、 或包含Wget
或开头的用户代理curl
)。您通常可以使用浏览器的开发工具(Firefox 和 Chrome 支持)来读取浏览器发送的标头。如果连接未加密(即未使用 HTTPS),那么您也可以为此使用数据包嗅探器,例如 Wireshark。
除了这些标头之外,网站也可能会在幕后触发一些改变状态的动作。例如,打开一个页面时,有可能在后台执行一个请求来准备下载链接。或者重定向发生在页面上。这些操作通常使用 Javascript,但也可能有一个隐藏的框架来促进这些操作。
如果您正在寻找一种从下载站点轻松获取文件的方法,请查看 plowdown,包含在plowshare 中。
小智 22
尝试了以上所有方法,但没有运气;使用开发浏览器工具获取用户代理字符串,添加以下内容后,成功:
--user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
Run Code Online (Sandbox Code Playgroud)
根据您的要求,它可能是一个 cookie。使用 Firefox,您可以在有问题的页面上单击鼠标右键,“查看页面信息”。选择“安全”图标,然后单击“查看 Cookies”按钮。
为了解决 cookie,Firefox “Live HTTP Headers”插件是必不可少的。您可以查看设置了哪些 cookie,以及将哪些 cookie 发送回 Web 服务器。
wget
可以使用 cookie,但它完全令人气愤,因为它没有暗示它没有发送 cookie。最好的办法是从您的浏览器中删除所有相关的 cookie,并通过它所需要的任何初始登录或页面查看顺序。查看“实时 HTTP 标头”以获取 cookie 以及任何 POST 或 GET 参数。wget
使用“--keep-session-cookies”和“--save-cookies”选项执行第一个登录步骤。这将为您提供一个可以使用文本编辑器查看的 cookie 文件。使用wget --load-cookies
与下一步骤的cookie文件。