Как мне использовать Perl LWP для входа в веб-приложение? - PullRequest
5 голосов
/ 22 июня 2009

Я хотел бы написать скрипт для входа в веб-приложение, а затем перейти к другим частям заявки:

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. Обнаружено, но без данных.

Если я отправляю имя пользователя / пароль со всеми необходимыми вещами, он должен вернуть домашнюю страницу приложения и поддерживать соединение, чтобы переместить другие части приложения.

Ответы [ 3 ]

15 голосов
/ 22 июня 2009

Вы можете использовать WWW :: Mechanize для этой цели:

Мех поддерживает выполнение последовательности выборок страниц, включая следующие ссылки и отправку форм. Каждая извлеченная страница анализируется, а ее ссылки и формы извлекаются. Можно выбрать ссылку или форму, заполнить поля формы и получить следующую страницу. Мех также хранит историю посещенных вами URL-адресов, которую можно запрашивать и пересматривать.

9 голосов
/ 22 июня 2009

Я предполагаю, что LWP не следует перенаправлению:

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

Любая причина, по которой вы не используете WWW :: Mechanize ?

1 голос
/ 15 июня 2010

Я использовал LWP для входа на множество веб-сайтов и работы с контентом, поэтому не должно возникнуть никаких проблем с тем, что вы хотите. Пока ваш код выглядит хорошо, но я бы предложил две вещи:

  1. Как уже упоминалось, вам может потребоваться перенаправить запросы
  2. Вам также может понадобиться включить куки: $ ua-> cookie_jar ({});

Надеюсь, это поможет

...