3

我正在尝试使用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();

登录有效,但是当我加载页面时,它告诉我我没有连接。

您会看到我将 cookie 存储在一个文件中。现在,如果我在没有登录部分的情况下重新启动脚本,它表示我已连接......

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

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

在脚本中,我尝试进行双重获取,但效果并不好。唯一的方法是启动它两次。

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

4

1 回答 1

2

我见过的一些网站没有在每个页面上正确设置或处理他们的会话 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...
于 2010-04-05T17:44:17.320 回答