5

Web アプリケーションにログインしてから、アプリケーションの他の部分に移動するスクリプトを書きたいと思います。

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use Data::Dumper;

$ua = LWP::UserAgent->new(keep_alive=>1);

my $req = POST "http://example.com:5002/index.php",
[ user_name     => 'username',
  user_password => "password",
  module        => 'Users',
  action        => 'Authenticate',
  return_module => 'Users',
  return_action => 'Login',
];

my $res = $ua->request($req);
print Dumper(\$res);
if ( $res->is_success ) {
    print $res->as_string;
}

このコードを試すと、アプリケーションにログインできません。返される HTTP ステータス コードは 302 ですが、データはありません。

ユーザー名/パスワードと必要なものをすべて投稿すると、アプリケーションのホームページが返され、接続を維持してアプリケーションの他の部分を移動する必要があります。

4

3 に答える 3

15

この目的のためにWWW::Mechanizeを使用できるかもしれません:

Mech は、リンクの追跡やフォームの送信など、一連のページ フェッチの実行をサポートしています。フェッチされた各ページが解析され、そのリンクとフォームが抽出されます。リンクまたはフォームを選択したり、フォーム フィールドに入力したり、次のページを取得したりできます。Mech は、アクセスした URL の履歴も保存し、照会して再アクセスすることができます。

于 2009-06-22T19:31:23.677 に答える
9

LWPリダイレクトに従っていないと思います:

push @{ $ua->requests_redirectable }, 'POST';

WWW::Mechanizeを使用していない理由はありますか?

于 2009-06-22T19:29:44.303 に答える
1

私は LWP を使用して多くの Web サイトにログインし、コンテンツを操作してきたので、やりたいことを問題なく行うことができます。あなたのコードはこれまでのところうまく見えますが、私が提案する2つのこと:

  1. 前述のように、リクエストをリダイレクト可能にする必要がある場合があります
  2. クッキーを有効にする必要があるかもしれません: $ua->cookie_jar( {} );

お役に立てれば

于 2010-06-15T06:23:58.973 に答える