Ruby URI:使用 "param[]=value" 为数组参数构建 URI
Ruby URI: build URI with "param[]=value" for array params
我正在尝试查询 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(感觉就像重新发明轮子)?
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
没有 return 方括号。
我正在尝试查询 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(感觉就像重新发明轮子)?
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
没有 return 方括号。