我正在尝试使用Wget下载一个页面,但是我无法通过登录屏幕。
如何在登录页面上使用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
参数被正确地百分号编码(尤其是&符号!),否则请求可能会失败。同时,确保user
和password
是正确的键;您可以通过查看登录页面的HTML(使用浏览器的“检查元素”功能并找到用户名和密码字段上的name
属性)来确定正确的键。
--delete-after
选项,这样您就不会把登录后的结果页保存下来。 - Jim Hunziker您可以通过Firefox登录,然后复制所需的标头:
-H
替换为wget的--header
(如果需要,还要将--data
替换为--post-data
)。wget
却没有;我怀疑 Web 服务检查多个不同的 GET 标头,甚至是看似不重要的标头,如“User-Agent”或“Cache-Control”。 - Arthurwget
以错误的方式提供了数据。 - Florian Blume我使用 --no-cookies
和 Cookie HTTP 请求头直接将现有连接的 cookie 传递给 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
我曾经遇到同样的问题。我的解决方法是通过Chrome登录并将cookie数据保存到文本文件中。可以使用此Chrome扩展轻松完成此操作:Chrome cookie.txt export extension。
获取cookie数据时,还提供了使用wget的示例。您可以获得一个简单的复制粘贴命令行。
我想要一行代码,不需要下载任何文件;以下是将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
--post-data 'key1=value1&key2=value2'
即可。注意:您也可以将POST数据保存在文件中,并使用wget命令并传递该文件名进行操作。wget http://username:password@www.domain.com/page.html
注意: 要使此方法生效,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
在您输入用户名和密码并选择“保存此计算机”的选项后,如果成功登录,您将看到该网站的一个美丽的文本网页。然后您可以注销。
在当前目录中,您会发现一个名为cookie.file的cookie文件。这是我们使用wget所需要的。
然后,您可以使用以下命令使用wget从该网站下载文件:
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz