Мне нужно обработать некоторые HTTP-URL в Perl-программе, но у меня есть сомнения, как класс URI
может помочь мне.
В частности, я хотел бы использоватьURI
класс для разрешения относительных URL-адресов и получения их компонентов.Однако проблемы заключаются в следующем:
Мне нужна функция для работы с URI
объектами и строками URI в качестве аргументов (или для обеспечения передачи только одного)
sub foo_string_or_url {
my $uri = URI->new(shift);
это правильный подход?Мне это не совсем нравится, потому что он строковый URI
и создает новый объект без необходимости.
Извлечение компонентов
my $host = $uri->host;
Это также проблематично,потому что не все URI
имеют хост, особенно если кто-то передает мусор в функцию, это будет die()
.
Разрешить относительный URL
my $new_url = URI::URL->new($uri, $base)->abs;
IIUC, без ->abs
, результат все равно будет преобразован в относительный URL (и не будет работать для HTTP::Request
s), я прав?Кроме того, гарантированно ли это вернуть URI
?
Как мне решить эти проблемы?Возможные варианты:
- Использование
->isa('URI')
и ->can("host")
все время - Мне кажется, что это может привести к ошибкам и уродливым
- Дон 'не использовать
URI
класс вообще и анализировать URL-адреса с помощью регулярных выражений - Я все же предпочел бы использовать решение для библиотеки, чем отлаживать свои собственные
- Wrap
URI
операций вtry { ... } catch { ... }
Есть ли вменяемый, надежный способ использования классов URI
?Что-то простое, о чем я не думал (в списке выше)?