获取URL的“基本URL”

时间:2012-07-09 20:35:01

标签: perl url

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

$resp->base;

其中$respHTTP::Response个对象。但是,现在我需要知道URL 的基础,而不是实际请求它们并获取HTTP::Response对象。有谁知道这样做的方法?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

HTTP::Response->base方法返回的值是从HTTP响应消息获取的URL,该URL指定如何解析出现在消息内容中的相对URL。如果消息未指定此类值,则使用用于请求消息的URL。

如果您想要来自HTTP::Response的网址,假设响应中没有相反的信息,那么只需按原样使用该网址即可。它可以作为基本URL正常工作。

任意网址没有单一基础。基本URL是用于解析相对URL的绝对URL,可以包含任意数量的路径步骤。

例如,

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

可以表示为

9735140.stm

相对于基本网址

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

1/hi/programmes/click_online/9735140.stm

相对于基本网址

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/

如果这是您想要的行为,那么一切都很顺利,但我不会将其描述为“获取基本网址”。