在我的应用程序中,我需要获取任何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