2010-08-17 30 views
3

我需要一个从一个应用程序到另一个包含文件附件和嵌套参数散列的另一个应用程序。我尝试使用HTTPClient哪些工作的文件附件,但我不能让参数发送嵌套格式。使用HTTPClient发布嵌套参数(散列)

 

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) 
 

与接收器应用程序看到PARAMS为{"d"=>"nameMichcityOstin","f"=>"eventSundance"}(与哈希瘫倒在嵌套级别字符串)

我不知道这是在http职位的限制还是我只是做错了什么。我曾与JSON合作过,我知道它支持嵌套结构,但我不知道如何添加文件附件。我很感激任何符合“最佳实践”的建议或替代方法。

回答

0

我不知道,你正在使用,所以我一直无法HTTPClient库来试试这个,但如果你使用的密钥这样

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

data_params[:params]仅仅是一个级别的散列。

然后接收应用程序将解压缩到您期望的嵌套散列。使用Rails

+0

谢谢你的解决方案。这将是很好的东西,可以采取任意深度的散列并发布。我想它必须像XML文章和单独的文件文章。 – fflyer05 2010-08-17 19:45:03

3

如果:

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

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

+0

当我尝试“x = Net :: HTTP.post_form(uri,params.to_query)”我得到一个错误“未定义的方法'地图'为#”。我如何在嵌套的params散列中使用它? – andrewcockerham 2014-09-18 12:51:16

+0

post_form方法意味着取一个散列而不是查询字符串。 – 2014-09-22 11:58:53

+0

谢谢佩德罗。我转而使用'.post'方法并开始工作。 'http.post(uri.path,params.to_query)' – andrewcockerham 2014-09-22 12:15:17