Подтвердить что ты не робот

Передача данных POST с контроллера в рельсах на другой веб-сайт

В веб-приложении, которое я создаю с рубинами на рельсах, у меня есть форма, которую пользователь представляет с некоторыми базовыми данными. Данные извлекаются в контроллере, и добавляется дополнительная информация, которая должна оставаться закрытой. Затем мне нужно отправить сообщение на внешний веб-сайт со всеми данными из контроллера. Каков наилучший способ сделать это? Заранее благодарим за любую помощь.

4b9b3361

Ответ 1

Самый простой способ - использовать библиотеку 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

Pro Совет: выполните асинхронный запрос, используя драгоценный камень, например delayed_job или background_rb

Пример взято из: http://biodegradablegeek.com/2008/04/how-to-post-form-data-using-ruby/

Ответ 2

Извините, я забыл упомянуть, что я подключался к защищенному серверу. По-видимому, это стало причиной того, что я заканчивал ошибки в файлах. Добавление с использованием '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 ответ.

Ответ 3

Если внешний сервер RESTful, просто создайте ActiveResource для обработки ваших данных.

Ответ 4

Я не думаю, что 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

Примечание: это воздушное кодирование и не проверено или проверено