Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用HTTPClient发布嵌套参数(哈希)_Ruby - Fatal编程技术网

Ruby 使用HTTPClient发布嵌套参数(哈希)

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][:

我需要一个从一个应用程序到另一个应用程序的多部分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][: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)