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/
El usuario envía un formulario con algunos datos básicos.
Los datos se reciben y tratan mediante una acción en el controlador y se agrega más información que debe permanecer privada.
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.