我需要在Perl程序中处理一些HTTP URL,但我怀疑这个URI类应该如何帮助我.
特别是,我希望使用URI该类来解析相对URL并获取它们的组件.但问题是:
我需要一个函数来处理URI对象和URI字符串作为参数(或确保只传递一个)
sub foo_string_or_url {
my $uri = URI->new(shift);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我不太喜欢它,因为它URI不必要地串化并创建新对象.
提取组件
my $host = $uri->host;
Run Code Online (Sandbox Code Playgroud)
这也是有问题的,因为并非所有URIs都有主机,特别是如果有人将垃圾传递给函数,这将是die().
解析相对URL
my $new_url = URI::URL->new($uri, $base)->abs;
Run Code Online (Sandbox Code Playgroud)
IIUC,没有->abs,结果仍然会串联到相对URL(并且不适用于HTTP::Requests),我是对的吗?此外,这是否保证返回URI?
我该如何处理这些问题?可能性是
->isa('URI')和->can("host")所有时间
URI类并使用正则表达式解析URL
URI操作try { ... } catch { ... }
使用这些URI课程是否有一种理智,傻瓜的方式?我没有想到的简单(在上面的列表中)?