如何通过Wget浏览登录页面?

时间:2009-08-24 19:59:43

标签: wget

我正在尝试使用Wget下载页面,但我无法通过登录屏幕。

如何使用登录页面上的帖子数据发送用户名/密码,然后以经过身份验证的用户下载实际页面?

11 个答案:

答案 0 :(得分:313)

基于手册页:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

确保--post-data参数正确percent-encoded(特别是&符号!)或请求可能会失败。另外,请确保userpassword是正确的密钥;您可以通过调整登录页面的HTML来找到正确的密钥(查看浏览器的“检查元素”功能,并在用户名和密码字段中找到name属性。)

答案 1 :(得分:50)

我直接使用--no-cookies和Cookie HTTP请求标头给wget的现有连接的cookie。在我的情况下,这是一个Moodle大学登录,其中登录看起来更复杂(使用登录票证的多个请求)。我添加了--post-data,因为它是一个POST请求。 例如,获取所有Moodle用户列表:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

答案 2 :(得分:36)

如果您需要一次性使用,您可以通过浏览器登录并随后复制所需的标题:

screenshot 在开发人员工具的“网络”选项卡中使用“复制为cURL”(打开后重新加载页面),并将curl的标题标记-H--data替换为wget的--header--post-data

答案 3 :(得分:25)

我遇到了同样的问题。我的解决方案是通过Chrome进行登录并将cookie数据保存到文本文件中。使用此Chrome扩展程序即可轻松完成此操作:Chrome cookie.txt export extension

当您获得cookie数据时,还有一个关于如何将它们与wget一起使用的示例。提供了一个简单的复制粘贴命令行。

答案 4 :(得分:9)

您不需要cURL来执行POSTed表单数据。 --post-data 'key1=value1&key2=value2'工作得很好。注意:您还可以使用文件中的POST数据将文件名传递给wget。

答案 5 :(得分:9)

我想要一个没有下载任何文件的单行程序;这是将cookie输出传递到下一个请求的示例。我只在Gentoo上测试了以下内容,但它应该适用于大多数* nix环境:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (这是一行,虽然它可能包含在你的浏览器上)

如果您希望将输出保存到文件,请将-O -更改为-O /some/file/name

答案 6 :(得分:8)

如果他们使用基本身份验证:

wget http://username:password@www.domain.com/page.html

如果他们使用的是POSTed表单数据,则需要使用类似cURL的内容。

答案 7 :(得分:4)

使用lynx和wget的解决方案。

注意: Lynx必须使用--enable-persistent-cookies标记进行编译才能生效

当您想使用wget从需要登录的站点下载某些文件时,您只需要一个cookie文件。 为了生成cookie文件,我选择了lynx。 lynx是一个文本Web浏览器。 首先,您需要lynx的配置文件来保存cookie。 创建一个文件lynx.cfg。将这些配置写入文件。

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

然后用这个命令启动lynx:

lynx -cfg=lynx.cfg http://the.site.com/login

输入用户名和密码后,选择“在此电脑上保存我”或类似内容。如果登录成功,您将看到该网站的精美文本网页。你退出了。 在当前目录中,您将找到名为cookie.file的cookie文件。这就是我们对wget所需要的。

然后wget可以使用此命令从站点下载文件。

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz

答案 8 :(得分:1)

使用 wget 在服务器上下载可在浏览器中获取的大文件链接的示例。

使用Google Chrome的示例。

登录您需要的地方,然后按下载。去下载并复制你的链接。

enter image description here

然后在登录页面打开 DevTools ,转到控制台并输入您的Cookie,输入document.cookie

enter image description here

现在,转到服务器并下载您的文件:wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

enter image description here

答案 9 :(得分:0)

您可以在Firefox中安装此插件:https://addons.mozilla.org/en-US/firefox/addon/cliget/?src=cb-dl-toprated开始下载所需的内容,然后单击该插件。它为您提供了用于wget或curl的整个命令,以将文件下载到serer上。很简单!

答案 10 :(得分:0)

我使用这个 chrome extension。它会为您提供打开任何下载链接的 wget 命令。