WWW::Mechanize Perl登录仅在重新启动后有效

WWW::Mechanize Perl登录仅在重新启动后有效,perl,login,www-mechanize,session-cookies,Perl,Login,Www Mechanize,Session Cookies,我正在尝试使用Perl和WWW::Mechanize自动登录网站 我所做的是: $bot = WWW::Mechanize->new(); $bot->cookie_jar( HTTP::Cookies->new( file => "cookies.txt", autosave => 1, ignore_discard => 1,

我正在尝试使用PerlWWW::Mechanize自动登录网站

我所做的是:

$bot = WWW::Mechanize->new();
$bot->cookie_jar(
        HTTP::Cookies->new(
            file           => "cookies.txt",
            autosave       => 1,
            ignore_discard => 1,
        )
);

$response = $bot->get( 'http://blah.foo/login' );

$bot->form_number(1);

$bot->field( usern => 'user' );
$bot->field( pass => 'pass' );
$response =$bot->click();

print $response->content();

$response = $bot->get( 'http://blah.foo' );

print $response->content();
登录正常,但当我加载页面时,它告诉我我没有连接

你看,我把cookies存储在一个文件中。现在,如果我在没有登录部分的情况下重新启动脚本,它会说我已连接

有人理解这种奇怪的行为吗

编辑:事实上,我注意到在某些平台上的某些web浏览器也会出现问题。页面显示“未登录”。但是,重新加载要登录的页面就足够了

在脚本中,我尝试了双get,但效果并不好。唯一的办法是发射两次


当我两次执行上一个请求时,它与curl一起工作。

我看到的一些网站没有在每个页面上正确设置或处理会话cookie,因此如果您以“意外”顺序访问它们的页面,它们将失败。例如,登录页面或登录处理程序页面或某些弹出式内容页面可能希望看到站点中的正常页面已经设置的会话cookie

这听起来像是您的问题,因为在获取页面时,当cookie已经设置好时,它会在第二次工作

我通过在脚本中模拟更典型的浏览器用户会话活动,在转到实际登录部分之前获取一些“正常”页面,解决了此类问题:

$www->get('http://www.example.com');         # Homepage
$www->get('http://www.example.com/account'); # Authenticated section front page
# Now everything is set up, proceed with account login...

哦,原来是你的机器人在网上发布了所有这些问题!:)这个问题是否存在于任何网站或特定的登录页面?你能提供一个在互联网上公开的页面的例子吗?这个页面展示了这种行为,所以我们可以试着复制它。请看下面我的补充。很遗憾,没有可用的公共页面,对不起。我建议您观察网络流量,看看到底发生了什么。试试Paros或Wireshark/tcpdump。非常感谢!我首先打开了一个受保护的页面,它将我重定向到登录页面。相反,我现在打开主页,然后打开受保护的页面,它可以完美地工作!