在我的应用程序中,我需要获取任何 URL 的基本 URL。到目前为止,我一直是这样的:
$resp->base;
$resp
对象在哪里HTTP::Response
。但是,现在我需要知道 URL 的基础,而无需实际请求它们并HTTP::Response
取回对象。有谁知道这样做的方法?
在我的应用程序中,我需要获取任何 URL 的基本 URL。到目前为止,我一直是这样的:
$resp->base;
$resp
对象在哪里HTTP::Response
。但是,现在我需要知道 URL 的基础,而无需实际请求它们并HTTP::Response
取回对象。有谁知道这样做的方法?
您想找到.
相对于您拥有的 url 的“”扩展的绝对 url。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
方法返回的值是从 HTTP 响应消息中获取的 URL,该 URL 指定如何解析出现在消息内容中的相对 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 的路径组件的最后一个元素,该元素后面没有斜杠,因此对于 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/
如果这是您想要的行为,那么一切都很好,但我不会将其描述为“采用基本 URL”。