2010-08-17 72 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