2010-10-08 23 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的引用標題的情況下(這是「片段」這個詞的唯一出現位置)。

相關問題