我正在尝试查询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
不返回方括号。