2014-01-21 36 views
1

我已经阅读了有关WWW ::机械化,这似乎是我想做的答案各种帮助和文档的页面,但我一直无法找到任何很好的例子和黑客攻击我自己的脚本一直不成功。如何使用WWW :: Mechanize通过POST登录并接受Cookie并浏览网站?

我已经成功安装了WWW ::机械化,我试图让它做什么,我需要......

基本上,我试图登录过程自动化到一个网站,然后去一个特定的页面。

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

我已经能够使用WWW ::机械化看到登录页面的源代码,但我不知道如何发布登录信息反馈给服务器,以获得登录和重定向。

基本的脚本我已经测试如下。任何人都可以帮我解决问题,或者直接给我一个可以让我自我帮助的例子吗?

另外,我不认为它很重要,但所涉及的网站相当,基于很多微软服务器和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; 
} 

回答

0

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

你写了上述脚本重定向到受保护的私人页面,您在登录后却发现会话cookie不存在任何更多。所以你实际上并没有享受登录用户的好处。基本上你需要启用cookie保存。

以下是你需要[使用相同的机械化库您使用]应该工作:

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. 

现在,当你提交你应该能够重定向到页面担保记录形式的Python代码没有你被注销。希望这能解决你的问题。

+0

谢谢你这一点,但我不知道有关Python。我不知道它是什么或它如何适合Perl脚本。你可以使用WWW :: Mechanize的Perl实现来解释它吗? – user3218875