【发布时间】:2012-02-11 12:03:15
【问题描述】:
我需要在 Perl 程序中处理一些 HTTP URL,但我怀疑URI 类应该如何帮助我。
特别是,我想使用 URI 类来解析相对 URL 并获取它们的组件。但是,问题是:
-
我需要一个函数来处理
URI对象和 URI 字符串作为参数(或确保只有一个被传递)sub foo_string_or_url { my $uri = URI->new(shift);这是正确的方法吗?我不太喜欢它,因为它会将
URI字符串化并不必要地创建新对象。 -
提取组件
my $host = $uri->host;这也是有问题的,因为并非所有
URIs 都有主机,特别是如果有人将垃圾传递给函数,这将die()。 -
解析相对 URL
my $new_url = URI::URL->new($uri, $base)->abs;IIUC,没有
->abs,结果仍将字符串化为相对URL(并且不适用于HTTP::Requests),对吗?另外,这是否保证返回URI?
我应该如何处理这些问题?可能性是
- 一直使用
->isa('URI')和->can("host")- 对我来说似乎容易出错且丑陋
- 根本不要使用
URI类并使用正则表达式解析URL- 我仍然宁愿使用库解决方案而不是自己调试
- 将
URI操作包装在try { ... } catch { ... }中- 见第一点
有没有一种理智的、万无一失的方式来使用URI 类?一些我没想到的简单事情(在上面的列表中)?
【问题讨论】: