从控制器提交POST数据到Rails的另一个网站(Submit POST data from con

2019-06-17 18:06发布

  1. 用户提交表单的一些基本数据。

  2. 的数据被接收并通过在所述控制器的操作和更多信息需要保持私密添加处理。

  3. 然后,我需要发送POST请求外部网站与所有来自控制器的组合数据。

做这个的最好方式是什么?

Answer 1:

该simpliest方法是使用红宝石核心库:

require "uri"
require "net/http"

params = {'box1' => 'Nothing is less important than which fork you use. Etiquette is the science of living. It embraces everything. It is ethics. It is honor. -Emily Post',
'button1' => 'Submit'
}
x = Net::HTTP.post_form(URI.parse('http://www.interlacken.com/webdbdev/ch05/formpost.asp'), params)
puts x.body

专业提示:做一个异步请求,使用像宝石的delayed_job或background_rb



Answer 2:

对不起,我忘了提及,我是连接到安全服务器。 这似乎已经是我得到的文件错误的结束的原因。 使用“网/ https”,并且在连接调用USE_SSL添加解决了这个问题。 感谢大家的帮助。

require 'net/https'
require 'open-uri'

url = URI.parse('https://MY_URL')
req = Net::HTTP::Post.new(url.path)
req.form_data = data
req.basic_auth url.user, url.password if url.user
con = Net::HTTP.new(url.host, url.port)
con.use_ssl = true
con.start {|http| http.request(req)}    

这是基于关闭的post_form法源,所以我想我会给vlad.zloteanu答案。



Answer 3:

如果外部服务器是平安,然后简单地创建的ActiveResource模型来处理你的数据。



Answer 4:

我不认为redirect_to的处理POST请求,因为它使用HTTP 302(?),它只是让其他页面。

我相信你可以做这样的事情

Class MyController < ActionController
    require 'net/http'

    def my_method
        #do something with the data/model

        my_connection = Net::HTTP.new('www.target.com', 80)
        reponse = my_connection.post(path_within_url, data)

        #do something with response if you want
    end

end

注:这是空气编码,并没有被尝试过或测试



文章来源: Submit POST data from controller to another website in Rails