【问题标题】:Ruby URI: build URI with "param[]=value" for array paramsRuby URI:使用“param[]=value”为数组参数构建 URI
【发布时间】: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(感觉就像在重新发明轮子)?

【问题讨论】:

    标签: ruby net-http


    【解决方案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 不返回方括号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2019-04-29
      • 1970-01-01
      相关资源
      最近更新 更多