2

私はWWW::Mechanize perlモジュールを使用して、Steam認証を必要とするWebサイトにログインしようとしています。これまでのところ、ログインページに正常にアクセスできましたが、フォームを送信すると、まったく機能しないようです。フォームが送信されても​​、ログインに失敗したかのようにページのコンテンツは変更されず、再試行する必要があります。私は数時間検索していて、フォームボックスの設定とテキストの送信のさまざまな組み合わせを試しましたが、何も機能していません。何らかの理由で、Mechanizeがログインが機能したかどうかを確認できるかどうかを確認することについてはほとんどわかりませんでした。おそらく私の検索用語は良くありません。

これが私がこれまでに得たコードです。これが行うべきことは、Steamログインページにリダイレクトするtf2whのログインフォームに移動し、ユーザー/パスを入力し、ボタンをクリックしてから、Cookieに保存されたログインセッションでtf2whに戻ります。ただし、機能するのは最初のログインリダイレクトだけです。

#!/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!";
}
4

1 に答える 1

1

いくつかのスチーム ヘッダーを伝播する必要がある場合があります。

シングル サインオン ソリューションには、すべて癖があります。

「あなたのゲーム」で認証/認証システムを使用する方法を説明している Steam の開発者ガイドを探していると運がいいかもしれません。

運が悪ければ、それらはすべてバイナリ オブジェクトにバンドルされています。運が良ければ、ログイン情報を伝達する対象と方法を正確に教えてくれます。

于 2012-11-19T20:19:13.123 に答える