在我的應用程序中,我需要獲取任何URL的基本URL。到現在爲止,我已經得到它像這樣:獲取URL的「基本URL」
$resp->base;
凡$resp
是HTTP::Response
對象。然而,現在我需要知道URL的基地而沒有實際上請求它們並得到一個HTTP::Response
對象。有誰知道一種方法來做到這一點?
在我的應用程序中,我需要獲取任何URL的基本URL。到現在爲止,我已經得到它像這樣:獲取URL的「基本URL」
$resp->base;
凡$resp
是HTTP::Response
對象。然而,現在我需要知道URL的基地而沒有實際上請求它們並得到一個HTTP::Response
對象。有誰知道一種方法來做到這一點?
您希望找到「.
」擴展的絕對網址,相對於您擁有的網址。 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/
由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/
如果這是您想要的行爲,那麼一切都很好,但我不會將其描述爲「取得基本網址」。
so'URI-> new_abs(「。」,「http://www.example.org/dir/」);'返回一個字符串? – srchulo 2012-07-09 20:52:58
它返回一個URI對象,但是URI對象會在需要的時候被自動字符串化爲他們所代表的URI。您也可以使用' - > as_string' – ikegami 2012-07-09 20:54:09
明確地將其字符串化,非常感謝! – srchulo 2012-07-09 20:55:26