通常,有登录表单的页面可以通过
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但是对于DekiWiki站点,如果需要登录,这是行不通的。
需要在man wget中描述的问题接缝
注意:如果Wget在POST请求完成后被重定向,它将不会将POST数据发送到重定向的URL。这是因为处理POST的URL通常以重定向到常规页面的方式响应,后者不希望或不接受POST。目前还不完全清楚这种行为是否是最优的;如果它不起作用,它可能会在未来被改变。
问题
这是否可以使用Perl来完成,例如使用HTML::TreeBuilder 3、HTML::TokeParser或Mechanize或任何其他Perl模块?
发布于 2011-12-31 18:05:00
一些需要登录的站点不会将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:Sitemaphttp://curl.haxx.se/download.html
另外,有时登录表单需要一个多部分/表单数据发布,而不仅仅是一个应用程序/x-www-表单-urlencoded帖子。要使curl做多部分/表单数据后,将其更改为--数据-urlencode到-F。
https://stackoverflow.com/questions/8689440
复制相似问题