Как получить WWW :: Mechanize для правильной обработки перенаправлений 302 с фрагментами URI? - PullRequest
0 голосов
/ 09 октября 2010

У меня есть веб-страница, которая перенаправляет на другой URL в виде http://www.example.com/url.html#midpage.

Мне интересно, есть ли в любом случае WWW :: Mechanize , который будет следовать http://www.example.com/url.html вместо http://www.example.com/url.html#midpage?

Ответы [ 2 ]

1 голос
/ 09 октября 2010

WWW :: Mechanize является подклассом LWP :: UserAgent , поэтому ответ тот же.

Если вы хотите обработать перенаправление самостоятельно наПерепишите URL, вы можете использовать обработчик response_done или response_redirect.См. Раздел «Обработчики» документации LWP :: UserAgent.

Что касается «правильно», то в спецификации HTTP не указано, что клиент должен делать с фрагментом, за исключением 14.6.в случае заголовка реферера (и это единственное место, где слово «фрагмент» даже появляется).

1 голос
/ 09 октября 2010

WWW::Mechanize подклассы LWP::UserAgent, поэтому вы все равно можете использовать любой из методов LWP::UserAgent. Таким образом, вы можете использовать метод simple_request(), который автоматически не обрабатывает перенаправления. Он просто возвращает вам ответ в виде объекта HTTP::Resonse. Это означает, что вы можете использовать методы is_redirect() и header() для получения URI перенаправления. Это означает, что вы можете использовать модуль URI, чтобы выполнить все после #.

Уф!

Ваш код будет выглядеть примерно так:

my $response = $mech->simple_request( HTTP::Request->new(GET => 'http://www.example.com/') );
if( $response->is_redirect ) {
  my $location = $response->header( "Location" );
  my $uri = new URI( $location );
  my $new_url = $uri->scheme . $uri->opaque;
# And here is where you do the load of the new URL.
}

Может быть что-то сложное, возможно, около линии header(), но это было бы общей идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...