ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


9
9999years

根据手册页:

# 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 属性)。


将 --keep-session-cookies 添加到第一个命令还是第二个?
为此,您不需要 -p (--page-requisites)。
在第一次检索中添加 --delete-after 也是值得的,这样您就不会最终保存登录后的结果页面。
我收到错误 WGET64: missing URL 我将整个 wget 命令放在一行中并删除了 `\`
只有第一个命令需要 --keep-session-cookies。它告诉第一个命令在将 cookie 保存到文件时包含会话 cookie。第二个命令只是从提供的文件中读取所有 cookie。
u
user

您可以通过浏览器登录,然后复制所需的标题:

https://i.stack.imgur.com/DePbs.png

browser developer tools 的网络选项卡中使用“复制为 cURL”,并将 curl 的标志 -H 替换为 wget 的 --header(如果需要,还可以将 --data 替换为 --post-data)。


惊人的!还向我指出了使用 curl 而不是 wget 的选项,因为它可以做同样的事情,我什至不需要更改参数。
这对我有用,而带有正确 cookie 的 wget 却没有;我怀疑 Web 服务会检查多个不同的 GET 标头,甚至是看似不重要的标头,例如“User-Agent”或“Cache-Control”。
@Arthur 对我来说,这个解决方案是唯一有效的。我试图从 URL 中删除尽可能多的标头数据,并最终得到了 cookie 数据。所以我怀疑 wget 以错误的方式提供了数据。
g
galoget

我使用 --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 时,这很有用。 :)
您也可以同时设置多个cookie, --header "Cookie: access_token=IKVYJ;XSRF-TOKEN=5e10521d"
G
GoTrained

我有同样的问题。我的解决方案是通过 Chrome 登录并将 cookie 数据保存到文本文件中。使用这个 Chrome 扩展程序很容易做到这一点:Chrome cookie.txt export extension

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


不幸的是,不适用于自动脚本
该问题未指定自动脚本。该解决方案允许 99% 的工作实现自动化。
不幸的是,谷歌一定是太聪明了,不适合这个把戏。我仍然得到一个登录页面。
当然,Google 使用秘密的 reCAPTCHA……正如我在很多地方看到的那样,在这种情况下,使用标准的编程 API 是最实用的选择。
不幸的是,您发布的链接已关闭。这个有效:chrome.google.com/webstore/detail/get-cookiestxt/… 与 wget 一起使用:wget --load-cookies /path/to/cookies.txt
g
galoget

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


P
Peter Mortensen

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


C
Community

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

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

如果他们使用 POSTed 表单数据,您需要改用 cURL 之类的东西。


我无权更改服务器上的任何内容,它是只读的
所以?这些都不需要您更改服务器上的任何内容。
Op 要求 wget 并且显然需要 cookie 的答案。
@hiburn8 只是跳过“如果他们使用基本身份验证”,我明白了吗?如果 OP 在 12 年后需要任何东西,他们可能会遇到麻烦。
a
alls0rts

使用 lynx 和 wget 的解决方案。

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

当您想使用 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

如果登录需要javascript怎么办? lynx 似乎不支持 javascript。
A
Alex Ivasyuv

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

例如使用谷歌浏览器。

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

https://i.stack.imgur.com/4sCjR.png

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

https://i.stack.imgur.com/7GAB7.png

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

https://i.stack.imgur.com/aGj8m.png


这个答案似乎不适用于谷歌——那里有两页 cookie!
当然,Google 使用秘密的 reCAPTCHA……正如我在很多地方看到的那样,在这种情况下,使用标准的编程 API 是最实用的选择。
V
Vahid

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


a
ady

您可以在 Firefox 中安装此插件:https://addons.mozilla.org/en-US/firefox/addon/cliget/?src=cb-dl-toprated 开始下载您想要的内容并单击该插件。它为您提供了 wget 或 curl 的完整命令,以在 serer 上下载文件。很容易!