У меня есть URL этого формата:
https://clientjiberish:[email protected]/users?username=tralala
когда я делаю:
url = 'https://clientjiberish:[email protected]/users?username=tralala'
uri = URI(url)
Я получаю все, что мне нужно.
uri.host => "api.example.com"
uri.userinfo => "clientjiberish:clientsecretjiberish"
uri.path => '/users'
uri.scheme => 'https'
Проблема возникает, когда часть userinfo содержит косую черту. У меня нет возможности изменить API, который обслуживает ключи API, поэтому мне нужно найти способ извлечь упомянутые части URI.
Вот пример того, что вы можете проверить URI:
url = 'https://clientjiberish:client/[email protected]/users?username=tralala'
uri = URI(url)
Ошибка:
URI::InvalidURIError: неверный URI (это не URI?)
Я узнал, что вы можете создать свой собственный парсер следующим образом:
parser = URI::Parser.new(:RESERVED => ";/?:@&=+$,\\[\\]")
uri = parser.parse(url)
но я недостаточно знаю регулярное выражение, чтобы заставить его работать.
client/secretjiberish
с помощью%2F
?. - person Rashmirathi   schedule 28.09.2016clientjiberish:client/secretjiberish
, поэтому URL становитсяhttps://clientjiberish:client%[email protected]/users?username=tralala
. - person Rashmirathi   schedule 28.09.2016'https://clientjiberish:[email protected]/users?username=tralala'
. Как мне просто избежать этой части строки? - person Marko Ćilimković   schedule 29.09.2016