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


46

维基百科的某些部分在您登录时会出现不同的显示。我想获取用户页面,使它们看起来就像我登录时一样。

有没有办法我可以这样获取用户页面

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

这是登录页面:

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


有关使用Google Chrome + cURL的简单解决方案,请参见stackoverflow.com/a/21919431/1136018
pterojacktyl,

Answers:


50

简单方法:使用浏览器登录,然后将cookie交给wget

最简单的方法:通常,您需要向wgetcurl提供来自特定网站的(已登录)Cookie,以便它们像您已登录时一样获取页面。

如果您使用的是Firefox,则可以通过“ 导出Cookies”插件轻松进行。安装加载项,并:

  1. 转到“ 工具...导出Cookie”,然后保存cookies.txt文件(您可以更改文件名/目标)。
  2. 打开一个终端,并使用wget--load-cookies=FILENAME选件,例如

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • 对于卷曲,它是curl --cookie cookies.txt ...

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

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

  • 详细的操作方法超出了此答案的范围,但是您可以将curl与选项--cookie-jarwget一起使用--save-cookies --keep-session-cookies,并与HTTP / S PUT方法一起使用以登录到站点,保存登录cookie,然后将其用于模拟浏览器。
  • 不用说,这需要通过登录页面的HTML源代码(获取输入字段名称等),并且对于使用除简单登录/密码身份验证之外的任何其他内容的网站来说,通常很难工作。
  • 提示:如果您采用这种方式,则至少在身份验证步骤中,处理网站的移动版本(如果有)通常会更简单。

1
不错的提示。移动网站的代码通常更简洁。
CousinCocaine

4
这样的cookies.txt看起来如何?
Frederick Nord

这个“导出Cookie”插件创建了一个cookie文件,其中包含我在Firefox中访问的每个站点的cookie。因此,如果您遵循此答案,则将向您访问的任何站点展示所有cookie。我认为这是安全漏洞。您可以使用以下方法轻松解决此问题: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers


您可以在Firefox中使用Cookie Manager插件来仅导出选定的Cookie。
汉斯·金泽尔

7

另一个简单的解决方案对我有用,无需安装任何额外的东西:

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

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

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


4

使用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。一旦获得了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代码。

关于“完整”的注释2:您无法使用cURL呈现javascript,只能获取源代码。


1
-X参数代表“ do post”,但using --data=xxx -X是隐式的,因此可以确定将其删除。
erm3nda 2014年

-bread cookie
Timo

3

对于仍然对这个问题感兴趣的人,有一个非常有用的Chrome扩展程序叫CurlWGet,它使您可以一键生成带有身份验证措施等的wget/ curl请求。要安装此扩展,请按照以下步骤操作:

  1. Chrome Webstore安装扩展程序
  2. 转到您要下载的网页。
  3. 开始下载。
  4. 该扩展程序将为您生成一个链接。

请享用!


2

博客文章Wget with Firefox Cookies展示了如何访问Firefox存储cookie的sqlite数据文件。这样一来,无需手动导出cookie即可与wget一起使用。有评论表明它不适用于会话cookie,但对于我尝试过的网站来说效果很好。


2

看看Firefox的cliget

当您要下载时,在最终的下载对话框中,您可以选择将curl命令行下载内容复制到剪贴板。


1

你有尝试过吗?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A

是的-不幸的是,这行不通=(
user784637 2012年

6
注意:此语法仅适用于基本HTTP身份验证(浏览器会弹出一个特殊的“用户名/密码”对话框),不适用于基于网页的身份验证。
ish 2012年

基本的HTTP身份验证url格式为admin:admin@www.url.com,但正如@izx所说,基本的HTTP是浏览器功能,而不是PHP编程或代码。如果有一天您需要访问受htaccess保护的网址,则可以使用该模式; D
erm3nda 2014年

我没有投票,但是这不是进行身份验证的好方法:如果您无意中将此类脚本公开,人们可以使用您的密码。
Willem Van Onsem 2014年

1
下票是什么?可能不是一个完整的答案,但仍然是一个答案。

1

尝试类似的方法:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

另请参阅此链接:

如何使用wget下载此网页?


就像任何输出一样。使用> filename.html保存在当前目录的输出或把一个完整的文件路径。这适用于Linux和Windows系统。
erm3nda 2014年

因此,我看到wget具有许多功能,例如cURL,反之亦然。它可以执行POST,因此可以登录网站。有趣。
erm3nda 2014年

1

对于更复杂的基于网站的登录,您还应该考虑使用Python脚本和一些模仿浏览器的模块,例如http://wwwsearch.sourceforge.net/mechanize/,而不是curlor wget

这样,会话cookie会自动处理,您可以跟踪链接并填写登录表格,从而在登录过程中像使用网络浏览器一样“编写”自己的脚本。


是的,使用机械化可能真的很好。在Perl中也可以(并且最初可以使用),如果那是您的最佳选择。
andol 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.