从rails中的控制器提交POST数据到另一个网站

在我使用轨道上的ruby构build的Web应用程序中,我有一个用户使用一些基本数据提交的表单。 数据在控制器中被检索,并且需要保持私密的更多信息被添加。 然后,我需要发送一个post请求到外部网站与控制器的所有组合数据。 什么是最好的方法来做到这一点? 在此先感谢您的帮助。

最简单的方法是使用ruby核心库:

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之类的gem来执行asynchronous请求

取自以下网页的示例: http : //biodegradablegeek.com/2008/04/how-to-post-form-data-using-ruby/

对不起,我忽略了提到我正在连接到安全服务器。 这似乎是我得到文件错误结束的原因。 使用“net / 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答案。

如果外部服务器是RESTful,那么只需创build一个ActiveResource模型来处理您的数据。

我不认为redirect_to处理发布请求,因为它使用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 

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