如何让WWW :: Mechanize正确处理带有URI片段的302重定向?

时间:2010-10-08 20:13:45

标签: perl redirect mechanize

我有一个网页,它以http://www.example.com/url.html#midpage的形式重定向到另一个网址。

我想知道WWW::Mechanize是否仍然关注http://www.example.com/url.html而不是http://www.example.com/url.html#midpage

2 个答案:

答案 0 :(得分:1)

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()线附近,但这是一般的想法。

答案 1 :(得分:1)

WWW::MechanizeLWP::UserAgent的子类,所以答案是一样的。

如果您想自己重定向以重写URL,则可能需要使用response_doneresponse_redirect处理程序。请参阅LWP :: UserAgent文档的“处理程序”部分。

对于“正确”,HTTP specification没有说明客户端应该对片段做什么,除了14.6在引用者标题的情况下(这是“片段”这个词的唯一地方甚至显示向上)。