使用httparty时不要进行URI编码

时间:2016-11-02 17:58:05

标签: ruby httparty

我使用httparty设置了请求,并希望不进行URI编码。我已经读过有一种可用的类方法

query_string_normalizer proc { |query|
  query.map do |key, value|
    value.map {|v| "#{key}=#{v}"}
  end.join('&')
}

但我不确定如何在我当前的设置中使用它

url = 'https://url/here/report.json?'
query = { 'param1' => '125894',
          'param2' => 'yesterday',
          'param3' => 'about',
          'param4' => 'client',
          'parameters' => 'ns_ti:*',
          'user' => ENV['USERNAME'],
          'password' => ENV['PASSWORD']
}
response = HTTParty.get(url, query: query)
results = JSON.parse(response.body)

这里的问题是parameters被编码并以“ns_ti%3A%2A”的形式发送,我想避免这种情况。

1 个答案:

答案 0 :(得分:2)

为HTTParty创建自己的包装器,并将proc传递给覆盖URI编码的规范化器。

app/config/intializers/rich_lewis_http.rb

class RichLewisHttp

  include HTTParty

  query_string_normalizer proc { |query|
    query.map do |key, value|
      [value].flatten.map {|v| "#{key}=#{v}"}.join('&')
    end.join('&')
  }

end

然后你可以......

response = RichLewisHttp.get(url, query: query)
results = JSON.parse(response.body)