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 已过时