使用 httparty 时不要对 URI 进行编码
Do not URI encode when using httparty
我有一个使用 httparty 的请求设置,不希望进行 URI 编码。我读到有一个 class 方法可用
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' 发送,我想避免这种情况。
为 HTTParty 制作您自己的包装器并将过程传递给覆盖 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)
我有一个使用 httparty 的请求设置,不希望进行 URI 编码。我读到有一个 class 方法可用
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' 发送,我想避免这种情况。
为 HTTParty 制作您自己的包装器并将过程传递给覆盖 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)