我有一个网页,它以http://www.example.com/url.html#midpage的形式重定向到另一个网址。
我想知道WWW::Mechanize是否仍然关注http://www.example.com/url.html而不是http://www.example.com/url.html#midpage?
答案 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::Mechanize是LWP::UserAgent的子类,所以答案是一样的。
如果您想自己重定向以重写URL,则可能需要使用response_done
或response_redirect
处理程序。请参阅LWP :: UserAgent文档的“处理程序”部分。
对于“正确”,HTTP specification没有说明客户端应该对片段做什么,除了14.6在引用者标题的情况下(这是“片段”这个词的唯一地方甚至显示向上)。