Ruby 使用HTTPClient发布嵌套参数(哈希)
我需要一个从一个应用程序到另一个应用程序的多部分http post,其中包括一个文件附件和一个嵌套的params散列。我尝试使用Ruby 使用HTTPClient发布嵌套参数(哈希),ruby,Ruby,我需要一个从一个应用程序到另一个应用程序的多部分http post,其中包括一个文件附件和一个嵌套的params散列。我尝试使用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][:
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)
接收方应用程序将参数视为{“d”=>“nameMichcityOstin”,“f”=>“eventSundance”}
(散列在嵌套级别上折叠为字符串)
我想知道这是对http帖子的限制,还是我只是做错了什么。我以前使用过JSON,我知道它支持嵌套结构,但我不知道如何添加文件附件。我非常感谢任何建议或替代方法,这些建议或方法符合“最佳实践”的要求 我不确定您使用的是哪个
HTTPClient
库,所以我无法尝试这个,但是如果您使用这样的键呢
data_params[:params]['d[name]'] = "Mich"
data_params[:params]['d[city]'] = "Ostin"
i、 e.data_params[:params]
只是一级散列
然后接收应用程序会将其解包到您期望的嵌套哈希中。如果使用Rails:
> {:a=>53,:b=>{:c=>7}}.to_query
=> "a=53&b[c]=7"
感谢您提供的解决方案。如果有一些东西可以接受任意深度的散列并发布,那就太好了。我想它必须类似于一个XML post和一个单独的文件post。当我尝试“x=Net::HTTP.post_form(uri,params.to_query)”时,我得到一个错误“未定义的方法` map'for#”。我如何在嵌套的params散列上使用它?方法post_form是用来获取散列,而不是查询字符串。谢谢Pedro。我转而使用
.post
方法工作<代码>http.post(uri.path,参数to_query)