[英]Ruby's Faraday - include the same param multiple times
我正在使用一個 API,該 API 迫使我多次發送相同的參數名稱以級聯不同的過濾條件。 因此,示例 api GET 調用如下所示:
GET http://api.site.com/search?a=b1&a=b2&a=b3&a=c2
我將 Faraday 用於我的 REST 適配器,它將其 URL 參數作為哈希(因此 - 它具有唯一的鍵)。 這意味着我不能做這樣的事情:
response = Faraday.new({
url: 'http://api.site.com/search'
params: { a: 'b1', a: 'b2', a: 'b3', a: 'c2' } # => nay
}).get
我試圖在發送請求之前破解網址:
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 )
哪個不起作用 - 當我調試響應時,我看到發送到 API 服務器的實際 url 是:
GET http://api.site.com/search?a[]=b1&a[]=b2&a[]=b3&a[]=c2
我無法更改 API。 有沒有辦法繼續與法拉第合作並以優雅的方式解決這個問題? 謝謝。
一段時間以來,我一直試圖弄清楚如何做到這一點。 我最終挖掘了法拉第代碼,並在測試套件中找到了這個用例。
:params => {:color => ['red', 'blue']}
應該屈服
color=red&color=blue
如果您不想升級到 0.9.x
module Faraday
module Utils
def build_nested_query(value, prefix = nil)
case value
when Array
value.map { |v| build_nested_query(v, "#{prefix}") }.join("&")
when Hash
value.map { |k, v|
build_nested_query(v, prefix ? "#{prefix}%5B#{escape(k)}%5D" : escape(k))
}.join("&")
when NilClass
prefix
else
raise ArgumentError, "value must be a Hash" if prefix.nil?
"#{prefix}=#{escape(value)}"
end
end
end
end
我認為你稱呼法拉第的方式是不正確的。 您需要先定義一個連接(不帶參數),然后在該連接上調用 HTTP 方法。
像這樣的東西:
require 'faraday'
client = Faraday::Connection.new :url => "http://api.twitter.com" do |builder|
builder.response :logger
# some middleware that helps to process a request/response comes here
end
client.get "search", { a: 1, b:2 }
這應該為您構建此請求:
I, [2013-02-05T15:15:40.665955 #57012] INFO -- : get http://api.twitter.com/search?a=1&b=2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.