ruby - 在法拉第传递 url 参数数组

标签 ruby arrays faraday

我是 Faraday 的新手,正在尝试学习如何传递 url 参数的数组。我的代码如下所示:

require 'faraday'

conn = Faraday.new(:url => 'http://foo.com:8888') do |faraday|
  faraday.request :url_encoded
  faraday.response :logger
  faraday.adapter Faraday.default_adapter
end

response = conn.get '/api/endpoint', { :bar => ['baz', 'qux'] }
response.body    

当我调试时,我发现 URL 被编码为:

INFO -- : get http://foo.com:8888/api/endpoint?bar[]=baz&bar[]=qux

而不是http://foo.com:8888/api/endpoint?bar=baz&bar=qux。当我传递参数数组时,如何让 faraday 在没有 [] 的情况下对 URL 进行编码?

最佳答案

我现在明白为什么会发生这种情况了。

这个问题实际上已在 Faraday 版本 0.9+ 上得到修复,但这仅作为 RC 提供。

所以有两个选择: 将您的代码更改为如下所示(猴子补丁,取自 Ruby's Faraday - include the same param multiple times )

require 'faraday'

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

conn = Faraday.new(:url => 'http://foo.com:8888') do |faraday|
  faraday.request :url_encoded
  faraday.response :logger
  faraday.adapter Faraday.default_adapter
end

response = conn.get '/api/endpoint', { :bar => ['baz', 'qux'] }
response.body 

或者使用预发布的 Faraday 0.9 版本

gem install faraday --pre

并将其添加到您的代码中:

faraday.params_encoder = Faraday::FlatParamsEncoder

这将阻止它添加 [] 符号。

关于ruby - 在法拉第传递 url 参数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705845/

相关文章:

ruby - 如何调试 Ruby google-api-client 的 HTTP

ruby - 如何强制 Float 在不使用科学记数法的情况下以完全精确的方式显示,而不是作为字符串显示?

javascript - 我怎样才能逃脱并删除“;”?从 Rails 提供的数据到 JavaScript

ruby - 当所有规范都通过guard-rspec时,有没有办法抑制Growl通知?

c - C 中的免费多维字符** 不起作用

ruby - google_drive 和 google-api-client 中的法拉第冲突

ruby-on-rails - Rails 从 JSON 数据访问散列中的键

ruby-on-rails - 在 Rails 运行时提供参数

java - 为什么Java支持255维数组,而在现实生活中我们很少超过2D?

php - 在$ _POST中将空值替换为NULL