如何使用Wget通过登录页面?

我试图使用Wget下载一个页面,但我无法通过登录屏幕。

我如何发送用户名/密码使用post数据登录页面,然后下载实际页面作为一个认证用户?

353261 次浏览

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

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

如果他们使用post表单数据,你将需要使用类似旋度的东西代替。

参考手册:

# 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来找到正确的键(查看浏览器的“inspect element”特性,并在用户名和密码字段中找到name属性)。

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

我也有同样的问题。我的解决方案是通过Chrome登录,并将cookie数据保存到一个文本文件中。这很容易做到这个Chrome扩展:Chrome cookie.txt导出扩展

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

我直接将现有连接的Cookie与--no-cookies和Cookie HTTP请求头一起交给wget。在我的例子中,它是一个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

你可以通过Firefox登录,然后复制所需的头文件:

截图

使用“Copy as cURL"在Firefox的浏览器开发工具的Network选项卡中,并将curl的标志-H替换为wget的--header(如果需要,也将--data替换为--post-data)。

我想要一个不下载任何文件的一行程序;下面是一个将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.ext

一个使用lynx和wget的解决方案。

注意:Lynx必须使用——enable-persistent-cookies标志来编译才能工作

当你想用wget从一个需要登录的网站下载文件时,你只需要一个cookie文件。 为了生成cookie文件,我选择了lynx。 Lynx是一个文本网页浏览器。 首先,您需要一个配置文件,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

输入用户名和密码后,选择“保存我在这台pc上”或类似的东西。如果登录成功,您将看到一个漂亮的文字网页的网站。然后注销。 在当前目录中,您将找到一个名为cookie.file的cookie文件。这是我们wget所需要的

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

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

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

例如使用谷歌Chrome。

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

enter image description here

然后在你登录的页面上打开DevTools,进入控制台并通过输入document.cookie来获取你的cookie

enter image description here

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

enter image description here

你可以在Firefox中安装这个插件:https://addons.mozilla.org/en-US/firefox/addon/cliget/?src=cb-dl-toprated开始下载你想要的,然后单击插件。它提供了wget或curl在服务器上下载文件的完整命令。非常简单!

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