text_field tag rails form_with form_tag form fields_for example ruby-on-rails ruby forms request form-submit

ruby-on-rails - tag - select form rails



Enviar datos POST del controlador a otro sitio web en Rails (4)

La forma más sencilla es usar la biblioteca de ruby ​​core:

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

Consejo profesional: Haz una solicitud asíncrona, usando una gema como delayed_job o background_rb

Ejemplo tomado de: http://biodegradablegeek.com/2008/04/how-to-post-form-data-using-ruby/

  1. El usuario envía un formulario con algunos datos básicos.

  2. Los datos se reciben y tratan mediante una acción en el controlador y se agrega más información que debe permanecer privada.

  3. Luego, debo enviar una solicitud postal a un sitio web externo con todos los datos combinados del controlador.

¿Cuál es la mejor manera de hacer esto?


Lo siento, olvidé mencionar que me estaba conectando al servidor seguro. Esta parece haber sido la razón por la que recibí errores al final del archivo. Agregar el uso de ''net / https'' y llamar a use_ssl en la conexión resolvió el problema. Gracias por la ayuda de todos.

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)}

Esto se basa en la fuente del método post_form, así que supongo que daré la respuesta a vlad.zloteanu.


No creo que redirect_ maneje las solicitudes de publicación porque usa http 302 (?) Que simplemente OBTIENE la otra página.

Creo que puedes hacer algo como esto

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

nota: esto está codificado con aire y no ha sido probado o probado


Si el servidor externo es RESTful, simplemente cree un modelo de ActiveResource para manejar sus datos.