我有一个这种格式的 URL:
https://clientjiberish:clientsecretjiberish@api.example.com/users?username=tralala
当我做:
url = 'https://clientjiberish:clientsecretjiberish@api.example.com/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/secretjiberish@api.example.com/users?username=tralala'
uri = URI(url)
错误:
URI::InvalidURIError: bad URI(不是 URI?)
我发现您可以像这样创建自己的解析器:
parser = URI::Parser.new(:RESERVED => ";/?:@&=+$,\\[\\]")
uri = parser.parse(url)
但我对正则表达式知之甚少,无法使其发挥作用。