2

在我的应用程序中,我需要获取任何 URL 的基本 URL。到目前为止,我一直是这样的:

$resp->base;

$resp对象在哪里HTTP::Response。但是,现在我需要知道 URL 的基础,而无需实际请求它们并HTTP::Response取回对象。有谁知道这样做的方法?

4

2 回答 2

3

您想找到.相对于您拥有的 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/
于 2012-07-09T20:48:05.873 回答
0

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”。

于 2012-07-09T22:28:33.657 回答