使用HTTPClient发布嵌套的params(哈希)

时间:2010-08-17 15:44:56

标签: ruby

我需要一个从一个应用程序到另一个应用程序的多部分http帖子,其中包括文件附件和嵌套的params哈希。我尝试使用适用于文件附件的HTTPClient,但我无法使用params以嵌套格式发送。


data_params = Hash.new
data_params[:params] = Hash.new
data_params[:params][:f] = Hash.new
data_params[:params][:d] = Hash.new
data_params[:params][:d][:name] = "Mich"
data_params[:params][:d][:city] = "Ostin"
data_params[:params][:f][:event] = "Sundance"

http_client = HTTPClient.new
body = data_params[:params]
response = http_client.post('http://localhost:3030/receiver/receive_test_data/', body)

接收方app看到params为{"d"=>"nameMichcityOstin","f"=>"eventSundance"}(哈希在嵌套级别上折叠成字符串)

我想知道这是对http帖子的限制还是我只是做错了什么。我之前使用过JSON,我知道它支持嵌套结构,但我不知道如何添加文件附件。我感谢任何建议或替代方法,这些建议或替代方法符合做这样的事情的“最佳实践”。

2 个答案:

答案 0 :(得分:4)

如果使用Rails:

> {:a=>53,:b=>{:c=>7}}.to_query 
=> "a=53&b[c]=7" 

http://apidock.com/rails/ActiveSupport/CoreExtensions/Hash/to_query

答案 1 :(得分:0)

我不确定你使用的是哪个HTTPClient库,所以我无法尝试这个,但是如果你使用这样的键怎么办

data_params[:params]['d[name]'] = "Mich"
data_params[:params]['d[city]'] = "Ostin"

即。 data_params[:params]只是一个级别的哈希。

然后接收应用程序会将其解压缩到您期望的嵌套哈希值。