Как мне остаться аутентифицированным при доступе к URL напрямую с помощью `get` в WWW :: Mechanize? - PullRequest
1 голос
/ 11 декабря 2011

Я новичок в WWW :: Mechanize , но я знаю, как войти в систему, а затем как использовать метод follow_link для доступа к другим страницам, когда я вхожу в систему. Но когда я хочуПолучив прямую ссылку, которой нет на странице, я теряю свою аутентификацию.

Быстрый пример проблемы:

my $LoginURL = "http://www.website.com/user/login.jsp?";
my $DirectURL= "/Somefile?param1&param2";
$mech = WWW::Mechanize->new();
$mech->get($LoginURL);
$mech->submit_form( ... ); # fields and stuff, works fine.
$mech->get($DirectURL);    # This part fails and I'm using the direct URL.

Я понимаю, как войти в систему, и я могу перемещаться с помощью follow_link, но когда я хочу получить доступ к URL-адресу, которого нет на странице, с помощью метода get, я просто теряю свою аутентификацию.

Что мне нужно сделать, чтобы оставаться аутентифицированным, когда я хочуполучить доступ к прямому URL, не расположенному на текущей странице?

Ответы [ 2 ]

0 голосов
/ 02 января 2012

Поскольку HTTP - это протокол без сохранения состояния, каждый запрос не зависит от предыдущего. В версиях, предшествующих HTTP 1.1, поведение HTTP-транзакций по умолчанию заключается в том, что клиент связывается с сервером, отправляет запрос и получает ответ, а затем и клиент, и сервер отключают соединение TCP. Если клиенту нужен другой ресурс на сервере, он должен восстановить другое TCP-соединение, запросить ресурс и отключиться. Если вы успешно прошли проверку подлинности, целевой веб-сайт может «забыть» об этом при попытке перейти на следующую страницу. Попробуйте посмотреть, какое значение включено в заголовок HTTP «Соединение». Это должно быть "keep-alive", а не "TE, закрыть". Если это проблема, попробуйте изменить заголовок «Соединение». Вы можете попробовать что-то вроде этого:

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

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

0 голосов
/ 11 декабря 2011

$ mech-> get () - перегрузка LWP :: UserAgent.Он ожидает абсолютных URL.

my $uri = $mech->uri();           # Get the current URI
my $uri->path_query($DirectURL);  # Replace the path with file path
$mech->get($uri->as_string);      # Returns http://www.website.com/Somefile?param1&param2
...