Ruby的法拉第 - 多次包含相同的参数

sa1*_*125 5 api url-parameters faraday

我正在使用一个API,它强制我多次发送相同参数的名称以级联不同的过滤条件.所以示例api GET调用如下所示:

GET http://api.site.com/search?a=b1&a=b2&a=b3&a=c2
Run Code Online (Sandbox Code Playgroud)

我正在使用Faraday作为我的REST适配器,它将其URL参数作为哈希(因此 - 它具有唯一键).这意味着我不能做这样的事情:

response = Faraday.new({
  url: 'http://api.site.com/search'
  params: { a: 'b1', a: 'b2', a: 'b3', a: 'c2' } # => nay
}).get
Run Code Online (Sandbox Code Playgroud)

我在发送请求之前试图破解网址:

connection = Faraday.new(url: 'http://api.site.com/search')
url        = connection.url_prefix.to_s
full_url   = "#{ url }?a=b1&a=b2&a=b3&a=c2"
response   = connection.get( full_url )
Run Code Online (Sandbox Code Playgroud)

哪个不起作用 - 当我调试响应时,我看到发送到API服务器的实际url是:

GET http://api.site.com/search?a[]=b1&a[]=b2&a[]=b3&a[]=c2
Run Code Online (Sandbox Code Playgroud)

我无法更改API.有没有办法继续与法拉第合作并以优雅的方式解决这个问题?谢谢.

小智 9

我一直试图弄清楚如何做一段时间.我最后挖掘了法拉第代码,并在测试套件中找到了这个用例.

:params => {:color => ['red', 'blue']}
Run Code Online (Sandbox Code Playgroud)

应该屈服

color=red&color=blue
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这种确切行为仅存在于v0.9 +中并且不是默认值(先前版本和0.9中的默认值将其编码为"颜色%5B%5D =红色和颜色%5B%5D =蓝色").要获得`color = red&color = blue`,您需要将`param_encoder`选项设置为`Faraday :: FlatParamsEncoder`. (4认同)