Ruby URI:使用“param[]=value”为数组参数构建 URI

Posted

技术标签:

【中文标题】Ruby URI:使用“param[]=value”为数组参数构建 URI【英文标题】:Ruby URI: build URI with "param[]=value" for array params 【发布时间】:2021-05-23 21:14:10 【问题描述】:

我正在尝试查询 API(lichess API)。而且我无法正确考虑参数,因为URI 格式化的 URL 不是数组参数的预期格式。

预期的格式是这样的:curl https://explorer.lichess.ovh/lichess?ratings[]=2200&ratings[]=2500。所以ratings参数是一个值数组,url应该使用ratings[]=value

我目前正在像这样生成我的 URI,as per the doc:

base = "https://explorer.lichess.ovh/master"
params = 
  ratings: [1600, 1800]


uri = URI(base)
uri.query = URI.encode_www_form(params)

但这会生成这样的 URL:https://explorer.lichess.ovh/master?ratings=1600&ratings=1800... 这不是预期的格式,并且 Lichess API 无法理解。

Ruby 是否提供任何内置方法来生成预期格式的参数,还是我需要手动构建 URL(感觉就像在重新发明***)?

【问题讨论】:

【参考方案1】:

Rails/ActiveSupport 有一个 to_query 方法,可以满足您的需求。

2.1.5 :010 > params.to_query
 => "ratings%5B%5D=1600&ratings%5B%5D=1800" 

另外,看看this comment,它解释了为什么URI.encode_www_form 不返回方括号。

【讨论】:

以上是关于Ruby URI:使用“param[]=value”为数组参数构建 URI的主要内容,如果未能解决你的问题,请参考以下文章

警告:在 ruby​​ 2.7.2 中使用回形针时,URI.escape 已过时

Ruby返回的HTTPVersionNotSupported对象

ruby URI类

PostgreSQL Connection URIs

ruby uri_builder.rb

ruby uri_builder.rb