如何使用WWW :: Mechanize通过POST登录并接受cookie并浏览网站?

时间:2014-01-21 11:14:58

标签: web mechanize

我已经阅读了有关WWW :: Mechanize的各种帮助和文档页面,这似乎是我想要做的答案,但我一直找不到任何好的例子,并且在黑客攻击我自己的脚本方面没有成功。

我已经成功安装了WWW :: Mechanize,并试图让它做我需要的......

基本上,我正在尝试自动登录网站,然后转到特定页面。

正常的人类过程对我来说:   1.转到一个“身份服务器”,这是一个https网站,提供一个简单的登录表单(带有一些隐藏的值,但有一个用户名和密码,一个提交按钮[和'保存我的登录'选项])。   2.成功登录后,“身份服务器”会自动将我重定向到受密码保护的网站,作为经过身份验证的用户。

我已经能够使用WWW :: Mechanize查看登录页面的源代码,但我不明白如何将登录信息发回服务器以登录并重定向。

我测试过的基本脚本如下。任何人都可以帮助我或指导我找到一个可以让我自己帮助自己的例子的资源吗?

此外,我认为这不重要,但涉及的网站非常基于Microsoft服务器和DNN。

提前致谢。


use strict;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new();
my $start = qq|https://login.foo.org/default.aspx|;
$mech->get($start);

my $username_field = 'ctl00$MainContent$tbUser';
my $password_field = 'ctl00$MainContent$tbPassword';

my $username = "123456";
my $password = "mypasssword";

$mech->field($username_field,$username);
$mech->field($password_field,$password);
$mech->submit(); # to get login cookie
my $results = $mech->submit();

if ($results->is_success) {
    print $results->content;
} else {
       print $results->message;
}

1 个答案:

答案 0 :(得分:0)

您的脚本问题是在您提交表单之后,您尝试登录的网站正在放置一个会话cookie,以便它可以验证您是经过验证的用户,并且您不需要在其后重新进行身份验证重定向到您的私人登录页面。

您编写的上述脚本在您登录后会将您重定向到安全的私人页面,但发现会话cookie不再存在。所以你实际上并没有享受登录用户带来的好处。基本上你需要启用cookie保存。

以下是您需要的[使用您正在使用的相同Mechanize库]的python代码。:

    import cookielib
    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj) # Now cookie jar can store the loggedIn session cookie so you can access the private pages of a logged in user.
    #Extra code may not be required for you
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False) #Some websites won't allow scripts by placing a robots.txt file in their root directory so you need to set robots to false. e.g. Google
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] #Some website allows only browsers to view them. So this is a trick(hack) which will be required for accessing such websites.

现在,当您提交表单时,您应该可以在不注销的情况下重定向到安全登录页面。希望这能解决你的问题。