当前位置: 首页>>技术教程>>正文


如何使用wget/curl从我登录的站点下载?

, ,

问题描述

当您登录时,维基百科的某些部分会有所不同。我想忘记用户页面,以便它们看起来好像我已登录。

有没有办法可以像这样忘记用户页面

http://en.wikipedia.org/wiki/User:A

这是登录页面:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3

最佳解决方法

简单的方法:使用浏览器登录,并将cookie提供给wget

最简单的方法:通常,您需要使用来自特定网站的(logged-in)cookie提供wget或curl,以便他们像登录一样获取页面。

如果您使用的是Firefox,可以通过Export Cookies add-on轻松完成。安装add-on,并:

  1. 转到工具…导出Cookies,然后保存cookies.txt文件(您可以更改文件名/目的地)。

  2. 打开一个终端,并使用wget--load-cookies=FILENAME选项,例如, wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A

    • 对于 curl ,它是curl --cookie cookies.txt ...

(我会尝试为Chrome /Chromium用户更新此答案)

困难的方法:使用curl(最好)或wget来管理整个会话

  • 详细的how-to超出了本答案的范围,但您使用curl与--cookie-jar或wget与--save-cookies --keep-session-cookies选项,以及HTTP /S PUT方法登录到站点,保存登录cookie,然后使用它们模拟浏览器。

  • 毋庸置疑,这需要浏览登录页面的HTML源代码(获取输入字段名称等),并且通常很难使用除简单登录/密码身份验证之外的任何其他站点。

  • 提示:如果您采用这种方式,处理网站的移动版本(如果可用)通常要简单得多,至少对于身份验证步骤而言。

次佳解决方法

使用cURL非常容易以两种方式处理cookie。

然后,curl www.target-url.com -c cookie.txt将保存名为cookie.txt的文件。但是您需要登录,因此需要使用带有以下参数的–data:curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt。获得loggued cookie后,您可以发送:curl www.target-url.com/?user-page.php -b cookie.txt

只需使用-c(–cookie)或-b(–cookie-jar)进行保存和发送即可。

注1:使用cURL CLI比PHP更容易,可能更快;)

要保存最终内容,您可以轻松地将> filename.html添加到您的cURL命令,然后保存完整的HTML代码。

关于”full”的注2:哟不能用cURL渲染javascript,只需获取源代码。

第三种解决方法

博客文章Wget with Firefox Cookies显示了如何访问Firefox存储其cookie的sqlite数据文件。这样就不需要手动导出cookie以与wget一起使用。评论表明它不适用于会话cookie,但它适用于我尝试过的网站。

第四种方法

对于那些对此问题仍然感兴趣的人,有一个非常有用的Chrome扩展名为CurlWGet,只需点击一下即可生成带有身份验证措施等的wget /curl请求。要安装此扩展程序,请按以下步骤操作:

  1. Chrome Webstore安装扩展。

  2. 转到您要下载的网页。

  3. 开始下载。

  4. 该扩展程序将为您生成一个链接。

请享用!

第五种方法

另一个简单的解决方案,无需安装任何额外功能,

这将为您提供一个命令,您可以将其直接粘贴到您的shell中,该命令包含您的所有Cookie凭据,例如:

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

然后,您可以修改命令中的URL以获取所需的任何内容。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2260.html,未经允许,请勿转载。