2012-07-09 103 views
2

在我的應用程序中,我需要獲取任何URL的基本URL。到現在爲止,我已經得到它像這樣:獲取URL的「基本URL」

$resp->base; 

$respHTTP::Response對象。然而,現在我需要知道URL的基地而沒有實際上請求它們並得到一個HTTP::Response對象。有誰知道一種方法來做到這一點?

回答

3

您希望找到「.」擴展的絕對網址,相對於您擁有的網址。 URI可以做到這一點。

$ perl -MURI -E'say URI->new_abs(".", $_) for @ARGV' \ 
    'http://www.example.org/dir/' \ 
    'http://www.example.org/dir/file.html' \ 
    'http://www.example.org/dir/file.cgi?foo=bar' 
http://www.example.org/dir/ 
http://www.example.org/dir/ 
http://www.example.org/dir/ 
+0

so'URI-> new_abs(「。」,「http://www.example.org/dir/」);'返回一個字符串? – srchulo 2012-07-09 20:52:58

+1

它返回一個URI對象,但是URI對象會在需要的時候被自動字符串化爲他們所代表的URI。您也可以使用' - > as_string' – ikegami 2012-07-09 20:54:09

+0

明確地將其字符串化,非常感謝! – srchulo 2012-07-09 20:55:26

0

HTTP::Response->base方法返回的值是從指定如何以解決出現在消息的內容相對URL的HTTP響應消息中獲得的URL。如果消息沒有指定這樣的值,則使用用於請求消息的URL來代替。

如果你想要一個來自HTTP::Response的URL,假設在響應中沒有相反的信息,那就直接使用URL即可。它可以很好地作爲基本URL。

沒有任何URL的單一基地。基本URL是用於解析相對URL的絕對URL,並且可以具有任意數量的路徑步驟。

例如,

http://news.bbc.co.uk/1/hi/programmes/click_online/9735140.stm 

可以表示爲

9735140.stm 

相對於基座URL

http://news.bbc.co.uk/1/hi/programmes/click_online/ 

或作爲

1/hi/programmes/click_online/9735140.stm 
相對於基座URL

http://news.bbc.co.uk/ 

,或者

當然,路徑可以被基部和相對URL在任何點之間劃分。

你不會說什麼是你想要使用的值。你乾脆選擇的解決方案剝掉那後面沒有斜槓的URL路徑組件的最後一個元素,因此對於URL

http://news.bbc.co.uk/1/hi/programmes/click_online 

返回

http://news.bbc.co.uk/1/hi/programmes/ 

http://news.bbc.co.uk/1/hi/programmes/click_online/ 

它返回相同的值

http://news.bbc.co.uk/1/hi/programmes/click_online/ 

如果這是您想要的行爲,那麼一切都很好,但我不會將其描述爲「取得基本網址」。