登录网站需要另一个网站

时间:2012-11-18 03:53:00

标签: perl login-script www-mechanize

我一直在使用WWW :: Mechanize perl模块尝试登录需要Steam身份验证的网站。到目前为止,我已经能够成功地将它带到登录页面,但是一旦我提交了表单,它似乎根本不起作用。提交表单时,页面内容不会更改,就像我登录失败一样,它希望我再试一次。我一直在寻找几个小时,我已经尝试了很多不同的设置表单框和提交文本的组合,但没有任何工作。出于某种原因,我发现很少检查Mechanize是否可以查看登录是否有效。也许我的搜索条件并不好。

这是我到目前为止所获得的代码。这应该做的是转到tf2wh的登录表单,重定向到Steam登录页面,填写用户/通行证,单击按钮,然后返回到tf2wh,保存在cookie中的登录会话。但是,唯一有效的部分是初始登录重定向。

#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;

my $user = "my_username";
my $pass = "my_password";
my $uri = 'http://www.tf2wh.com/?login';
my $cookies = 'cookies.txt';
my $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';

my $mechanize = WWW::Mechanize->new(
    agent => $agent,
    cookie_jar => {},
    autosave => 1,
    ignore_discard => 1);

$mechanize->add_header(
    "Connection" => "keep-alive",
    "Keep-Alive" => "115");

$mechanize->get( $uri );

$mechanize->success or die "Could not fetch login page.\n";

#One of many different forms I've tried
$mechanize->form_name('login');
$mechanize->set_visible($user, $pass);
$mechanize->click();
$mechanize->follow_link();

$mechanize->success or die 'Could not login.';

print "Logged in successfully! Trying to look at TF2WH now.\n";

#Test to see if we get the "You need to login" message
$mechanize->get('http://www.tf2wh.com/item.php?id=6011;6;78e2c5962db56a60f7c143a12875f3b6');

print "Fetched\n";

if($mechanize->text() =~ m{Handy Hint:})
{
    print "Failed to login.\n";
}
else
{
    print "Up and running!";
}

1 个答案:

答案 0 :(得分:0)

您可能需要传播一些Steam标头。

单点登录的解决方案都充满了怪癖。

您可能很幸运在Steam上寻找开发人员指南,其中介绍了如何在“您的游戏”中使用他们的authn / authz系统。

如果你运气不好,他们会把它全部捆绑到二进制对象中。如果你很幸运,他们会告诉你究竟是什么以及如何传播登录信息。