在Rails中发送多个字符串参数以发布请求

时间:2016-07-29 04:24:49

标签: ruby-on-rails ruby http post request

我正在使用Net::HTTP::Post向预先确定的网址发送请求,如下所示:

my_url = '/path/to/static/url' 
my_string_parameter = 'objectName=objectInfo' 
my_other_string_parameter = 'otherObjectName=otherObjectInfo' 

request = Net::HTTP::Post.new(my_url)
request.body = my_string_parameter 

但是,我知道my_url需要两个字符串参数。我有两个参数准备好(它们是静态生成的)要传入。有没有办法通过Ruby on Rails传递多个字符串 - my_string_parametermy_other_string_parameter到一个帖子请求?

编辑:为了清楚起见,我将以更有条理的方式重新解释一切。基本上,我所拥有的是

my_url = 'path/to/static/url' 
# POST requests made to this url require 2 string parameters, 
# required_1 and required_2 
param1 = 'required_1=' + 'param1_value' 
param2 = 'requred_2=' + 'param2_value' 
request = request.NET::HTTP::Post.new(my_url)

如果我尝试request.body = param1,那么正如预期的那样,我收到一条错误,说“必需字符串参数'required_2'不存在”。与request.body=param2相同,会弹出相同的错误,说'required_1'不存在。我想知道是否有办法将两个参数传递给request.body?或类似的东西?

3 个答案:

答案 0 :(得分:1)

试试这个。

uri = URI('http://www.example.com')
req = Net::HTTP::Post.new(uri)
req.set_form_data('param1' => 'data1', 'param2' => 'data2')

替代

uri = URI('http://www.example.com/')
res = Net::HTTP.post_form(uri, 'param1' => 'data1', 'param2' => 'data2')
puts res.body

对于requestGet之类的更多Patch,您可以参考This官方文档。

答案 1 :(得分:0)

你可以像这样发送它。

data = {'params' => ['parameter1', 'parameter2']}
request = Net::HTTP::Post.new(my_url)
request.set_form_data(data)

答案 2 :(得分:0)

如果您的参数是字符串:

url = '/path/to/controller_method' 
my_string_parameter = 'objectName=objectInfo' 
my_other_string_parameter = 'otherObjectName=otherObjectInfo'

url_with_params = "#{url}?#{[my_string_parameter, my_other_string_parameter].join('&')}"

request = Net::HTTP::Post.new(url_with_params)

如果您的参数是哈希那会更容易

your_params = {
  'objectName' => 'objectInfo',
  'otherObjectName' => 'otherObjectInfo'
}
url = '/path/to/controller_method'
url_with_params = "#{url}?#{your_params.to_query}"
request = Net::HTTP::Post.new(url_with_params)