通常,可以下载具有登录表单的页面
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::TokeParser或Mechanize或任何其他Perl模块吗?
一些需要登录的站点不会将 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。