如何下载登录后重定向的页面?

San*_*ing 5 bash perl

通常,可以下载具有登录表单的页面

wget --no-check-certificate --save-cookies cookies --keep-session-cookies \
     --post-data="username=example&password=example" \
     "https://example.com/index.php?title=Special:Userlogin&returntotitle="

wget --no-check-certificate --load-cookies=cookies \
     --no-parent -r --level=2 -nc -E \
     https://example.com/Special:Sitemap
Run Code Online (Sandbox Code Playgroud)

但是对于DekiWiki网站,如果需要登录,这不起作用.

问题接缝将在中描述 man wget

注意:如果在POST请求完成后重定向Wget,则不会将POST数据发送到重定向的URL.这是因为处理POST的URL通常会重定向到常规页面,而不希望或接受POST.这种行为是最佳的并不完全清楚; 如果它没有成功,将来可能会改变.

这可以使用Perl完成,例如使用HTML::TreeBuilder 3或者HTML::TokeParserMechanize或任何其他Perl模块吗?

Mot*_*tes 4

一些需要登录的站点不会将 cookie 与响应一起发送回来。

相反,它们会发送重定向响应(302 对象已移动),大多数浏览器会自动遵循该响应,然后在该重定向页面的响应中发送 cookie。

我使用curl 通过启用curl_opt FOLLOW_LOCATION 来完成此操作,对于命令行工具,使用-location 选项。它是一个像 wget 一样的免费工具。

curl --cookie cookie.txt --cookie-jar cookie.txt \
     --data-urlencode "username=example&password=example" \
     --insecure --location https://example.com/index.php?title=Special:Userlogin&returntotitle= -o downloadedfile.html https://example.com/Special:Sitemap
Run Code Online (Sandbox Code Playgroud)

http://curl.haxx.se/download.html

此外,有时登录表单需要多部分/表单数据帖子,而不仅仅是 application/x-www-form-urlencoded 帖子。为了使curl执行多部分/表单数据后将--data-urlencode更改为-F。