Ruby URI:使用数组参数的"param[]=value"构建 URI



我正在尝试查询API(无链接API)。我不能得到参数被正确考虑,因为URI格式的URL不是在数组参数的预期格式。

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

我现在像这样生成我的URI,按照文档:

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(感觉像是重新发明轮子)?

Rails/ActiveSupport有一个to_query方法,它会做你想做的。

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

还有,看看这个注释,它解释了为什么URI.encode_www_form不返回方括号。