ruby - 如何在 userinfo 部分解析带有正斜杠的 URL

标签 ruby uri userinfo

我有一个这种格式的 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 key 提供服务的 API,因此我需要找出一种方法来提取 URI 中提到的部分。

这是一个关于您可以测试 URI 的示例:

url = 'https://clientjiberish:client/secretjiberish@api.example.com/users?username=tralala'
uri = URI(url)

错误:

URI::InvalidURIError: bad URI(is not URI?)

我发现您可以像这样创建自己的解析器:

parser = URI::Parser.new(:RESERVED => ";/?:@&=+$,\\[\\]")
uri = parser.parse(url)

但我对正则表达式的了解还不够多,无法让它发挥作用。

最佳答案

url = 'https://clientjiberish:client/secretjiberish@api.example.com/users?username=tralala'
USER_INFO_REGEX = /\Ahttp[s]+:\/\/(.*)@.*\z/i
user_info = USER_INFO_REGEX.match(url)[1]
parsed_user_info = user_info.gsub(/\//, '%2F')
url = url.gsub(Regexp.new(user_info), parsed_user_info)
uri = URI(url)

USER_INFO_REGEX 匹配 https://@api.example.com... 之间的字符串。只需转义用户信息字符串并将其替换为 url。

关于ruby - 如何在 userinfo 部分解析带有正斜杠的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750056/

相关文章:

ruby-on-rails - 使用 Rails constantize inflector 调用命名空间类

ruby - ruby 中的 unshift + file.join

jquery - 在 HAML 中使用 JQuery 客户端模板逻辑

android - 无法使用 Facebook SDK 分享图片

swift - 调用中的额外参数 userinfo

ruby-on-rails - 让谷歌文件选择器与 drive.file 范围一起工作

java - 如何从 Android 中的下载文件夹获取 PDF 真实路径?

email - 如何解决垃圾邮件中的/@网址?

c# - 无法在 UWP 应用程序中获取某些用户帐户信息 - 内部事件目录(不是 Azure AD)

java - 在Java中获取Windows用户的登录时间