perl 如何让WWW::Mechanize正确处理302重定向和URI片段?

suzh9iv8  于 2022-12-19  发布在  Perl
关注(0)|答案(2)|浏览(130)

我有一个网页,重定向到另一个网址的形式http://www.example.com/url.html#midpage.
我想知道WWW::Mechanize是否可以跟随http://www.example.com/url.html而不是http://www.example.com/url.html#midpage?

70gysomp

70gysomp1#

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()线,但这将是总的想法。

5vf7fwbs

5vf7fwbs2#

WWW::MechanizeLWP::UserAgent的子类,因此答案是相同的。
如果您想自己处理重定向以重写URL,您可能需要使用response_doneresponse_redirect处理程序。请参阅LWP::UserAgent文档的“处理程序”部分。
至于“正确地”,HTTP specification并没有说明客户端应该如何处理片段,除了在14.6中的引用报头(这是唯一一个出现“片段”一词的地方)。

相关问题