如何使用 wget 从托管站点下载?

Zig*_*gnd 11 download wget hosting-services

wget 是一个非常有用的工具,可以在互联网上快速下载东西,但我可以用它从托管站点下载,比如 FreakShare、IFile.it、Depositfiles、Uploaded、Rapidshare 吗?如果是这样,我该怎么做?

Gil*_*il' 11

这种网站试图让不使用图形网络浏览器变得困难,因为如果您使用 wget,您将错过所有这些为带宽付费的广告。

一些站点不进行高级检查并且很容易被欺骗:告诉 wget 假装它真的是 Mozilla并且它来自下载站点。

wget --user-agent='Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1' \
     --referer=http://downloadsite.example.com/download-page-url
     http://downloadsite.example.com/download-page-url/filename.ext`
Run Code Online (Sandbox Code Playgroud)

大多数进行检查的站点都可以让您逃脱--user-agent=Mozilla并--referer设置为您正在下载的文件的 URL。

对于某些站点,您可能需要导出 Web 浏览器 cookie 并传递--load-cookies给 wget;此时使用 wget 开始比手动下载更多的工作。可以一直工作但需要为每个站点编写一些代码的最终方法是使用浏览器自动化框架,例如Selenium或Watir。

另请参阅使用 curl 自动化 Web 请求?


She*_*yar 7

对于 Zippyshare:

这种方法建立在吉尔斯的回答之上。就像他说的,诀窍是让服务器认为请求是从浏览器发出的,要做到这一点,你需要做几件事:

  • 下载链接(文件的实际链接)
  • Link Referrer(带有下载按钮的网页)
  • Zippyshare 会话 ID(在 Cookie 中找到)

这是一个屏幕截图,解释了您可以在何处获取每个项目:

从 Zippyshare 下载

现在打开你的终端,并使用以下命令(替换必要的项目):

wget <download_link> \
--referer='<referrer>' \
--cookies=off --header "Cookie: JSESSIONID=<session_id>" \
--user-agent='Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1'
Run Code Online (Sandbox Code Playgroud)

例子:

wget http://www16.zippyshare.com/d/29887835/8895183/hello.txt \
--referer='http://www16.zippyshare.com/v/29887835/file.html' \
--cookies=off --header "Cookie: JSESSIONID=26458C0893BF69F88EB5743D74FE0F8C" \
--user-agent='Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1'
Run Code Online (Sandbox Code Playgroud)

注意:在命令中,其实referer不是referrer