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

Señ*_*cis 250 wget

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

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

jar*_*oan 328

基于手册页:

# 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
Run Code Online (Sandbox Code Playgroud)

确保--post-data参数已正确进行百分比编码(尤其是&符号!)或请求可能会失败.另外,还要确保userpassword是正确的键; 你可以通过调整登录页面的HTML找到正确的密钥(查看浏览器的"检查元素"功能,并name在用户名和密码字段中找到属性).

  • 同样值得在第一次检索中添加`--delete-after`,这样您就不会最终保存结果页面以免登录. (13认同)
  • 将--keep-session-cookies添加到第一个命令,或第二个命令? (10认同)
  • - 仅第一个命令需要--keep-session-cookies.它告诉第一个命令在将cookie保存到文件时包含会话cookie.第二个命令只是从提供的文件中读取所有cookie. (5认同)
  • 你不需要`-p`(`--page-requisites`). (4认同)
  • 我收到错误消息“ WGET64:缺少URL”,我将整个wget命令放在一行中,并删除了“ \\” (2认同)

bap*_*ptx 55

我直接使用--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

  • 很棒的提示.当您可以从自己的计算机访问cookie,然后从命令行使用另一台无头计算机中的cookie时,这非常有用.:) (5认同)
  • 您也可以同时设置多个cookie, - header"Cookie:access_token = IKVYJ; XSRF-TOKEN = 5e10521d" (3认同)

use*_*ser 48

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

截图 在开发人员工具的网络选项卡中使用"复制为cURL"(打开后重新加载页面)并替换curl的标题标志-H--datawget的--header--post-data.


小智 27

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

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


Cal*_*ray 10

我想要一个没有下载任何文件的单线程; 这是将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


小智 9

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


cee*_*yoz 8

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

wget http://username:password@www.domain.com/page.html
Run Code Online (Sandbox Code Playgroud)

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

  • 所以?这些都不需要您更改服务器上的任何内容. (7认同)

Ale*_*yuv 6

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

例如使用谷歌浏览器。

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明


Pok*_*ace 5

使用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
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令启动lynx:

lynx -cfg=lynx.cfg http://the.site.com/login
Run Code Online (Sandbox Code Playgroud)

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

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

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
Run Code Online (Sandbox Code Playgroud)

  • 如果登录需要 javascript 呢?lynx 似乎不支持 javascript。 (3认同)