2010-10-08 22 views
0

我有一个网页,以http://www.example.com/url.html#midpage的形式重定向到另一个网址。如何获得WWW :: Mechanize以正确处理带有URI片段的302重定向?

我想知道是否有WWW::Mechanize跟着http://www.example.com/url.html而不是http://www.example.com/url.html#midpage

+0

你到目前为止尝试过什么?你的简短演示脚本在哪里显示问题?您是否阅读过文档? – 2010-10-08 21:19:22

+0

我认为你的意思是302重定向。 – CanSpice 2010-10-08 21:54:52

回答

1

WWW::Mechanize小类LWP::UserAgent,所以你仍然可以使用任何LWP::UserAgent的方法。因此,您可以使用不自动处理重定向的方法。它只是将您的回应作为HTTP::Resonse对象返回给您。这意味着您可以使用is_redirect()header()方法获取重定向URI。这意味着您可以使用URI模块在#后面拉取所有内容。

Whe!

您的代码将是这个样子:

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()线,但是这将是总体思路。

+0

我想我可能只是取消了片段部分,但它基本上是相同的方法。你会在reponse_done处理程序中做同样的事情。 – 2010-10-08 21:23:07

1

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

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

至于“正确”,HTTP specification没有说明客户端应该如何处理一个片段,除了在14.6的引用标题的情况下(这是“片段”这个词的唯一出现位置)。

相关问题