Rails публикует xml для защиты API веб-сервиса

Я пытаюсь использовать rails 4.0 для создания API для веб-службы, для которой требуется прямая почта xml на их защищенный сервер.

У меня есть форма, которая отправляет `:action => "testSubmit" для запуска следующего кода в моем контроллере, который я собрал воедино после нескольких часов (в основном устаревших) исследований и отладки.

def testSubmit

  xml = Builder::XmlMarkup.new
  xml.instruct!
  xml.sale do
    xml.tag! 'tag-1', "INFO_HERE"
    xml.tag! 'tag-2', "MORE_INFO"
    xml.amount "100.00"
  end

  uri = URI('https://secure.abc.com')

  Net::HTTP.start(uri.host, uri.port,
    :use_ssl => uri.scheme == 'https') do |http|
    response = http.post("/api/some/path", xml.to_s)
    flash[:notice] = "Sent?"
  end    



end

Фреймворк rails действительно перенаправляется на представление testSubmit.html.erb с присутствием flash, поэтому все указывает на то, что он может работать, но если я попытаюсь прочитать данные ответа, он окажется пустым. Например, если я включу <%= response %> в свое представление, я увижу:

#<ActionDispatch::Response:0x007fd167ddef60>

но <%= response.body %> ничего не отображает...

Я ожидаю, что ответ будет конкретным xml, который я проверил с помощью PHP и Curl, а также надстройки firefox «Poster».


person msanteler    schedule 09.01.2014    source источник


Ответы (1)


Решил это. Рабочий код ниже.

 def testSubmit

      xml = Builder::XmlMarkup.new
      xml.instruct!
      xml.sale do
        xml.tag! 'tag-1', "INFO_HERE"
        xml.tag! 'tag-2', "MORE_INFO"
        xml.amount "100.00"
      end

      uri = URI('https://secure.abc.com')

      Net::HTTP.start(uri.host, uri.port,
        :use_ssl => uri.scheme == 'https') do |http|
        @xml = xml.target!
        @response = http.post(uri.path, @xml, initheader = {'Content-Type' =>'text/xml'})
        flash[:notice] = "Sent?"
      end    

 end

Это: <%= @response.body %> Работает нормально...

person msanteler    schedule 10.01.2014