在我的应用程序中,我需要获取任何URL的基本URL。到目前为止,我一直都是这样:
$resp->base;
其中$resp
是HTTP::Response
个对象。但是,现在我需要知道URL 的基础,而不是实际请求它们并获取HTTP::Response
对象。有谁知道这样做的方法?
答案 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/
如果这是您想要的行为,那么一切都很顺利,但我不会将其描述为“获取基本网址”。