【问题标题】:Sending multiple string parameters to post request in Rails在 Rails 中发送多个字符串参数以发布请求
【发布时间】:2016-07-29 13:44:34
【问题描述】:

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

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 到 post 请求?

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

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?或者类似的东西?

【问题讨论】:

  • 请提供my_urlmy_string_parameter变量/方法的例子。
  • 我添加了更多细节,但不想透露太多。
  • 你想在本地控制器上发布?
  • 不完全是,它是一个静态 url。抱歉,我会更改它,因为我知道这很有误导性。

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


【解决方案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

更多request 喜欢GetPatch 你可以参考This 官方文档。

【讨论】:

  • 嗯,我没有使用表格,所以不确定这是否适用于这种情况。
  • post_form 是 HTTP 类方法,你只需要在里面传一个值
【解决方案2】:

你可以这样发送。

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

【讨论】:

  • 嗯,这似乎不起作用,因为 url 需要参数的特定名称,例如 param_1_name=param_1_value 和 param_2_name=param_2_value
  • 请根据具体要求编辑问题。
【解决方案3】:

如果你的参数是字符串:

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)

【讨论】:

  • 当我尝试其中任何一个时,我得到“#”的“未定义方法 `bytesize'”
猜你喜欢
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多