Ruby RestClient преобразует XML в хэш - PullRequest
1 голос
/ 08 февраля 2012

Мне нужно отправить запрос POST в виде строки XML, но я получаю странные результаты. Код:

require 'rest_client'

response = RestClient.post "http://127.0.0.1:2000", "<tag1>text</tag1>", :content_type => "text/xml"

Я ожидаю получить "<tag1>text</tag1>" в качестве параметра на сервере запросов. Вместо этого я получаю "tag1"=>"text". Он преобразует XML в хеш. Это почему? Есть ли способ обойти это?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Попробуйте:

response = RestClient.post "http://127.0.0.1:2000", 
                           "<tag1>text</tag1>", 
                           {:accept => :xml, :content_type => :xml}

Я думаю, вам просто нужно было указать ": принять", чтобы сообщить, что вы хотите получить его в формате XML.Предполагая, что это ваш собственный сервер, вы можете выполнить отладку на сервере и увидеть, что используемый формат запроса, вероятно, html.

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2012

Вместо использования RestClient используйте встроенный в Ruby Open :: URI для GET запросов или что-то вроде Net :: HTTP или невероятно мощный Typhoeus

uri = URI('http://www.example.com/search.cgi')
res = Net::HTTP.post_form(uri, 'q' => 'ruby', 'max' => '50')

В Typhoeus вы бы использовали:

res = Typhoeus::Request.post(
  'http://localhost:3000/posts',
  :params => {
    :title   => 'test post',
    :content => 'this is my test'
  }
)

Ваша полученная страница, если она в XML, будет легко проанализировать с помощью Nokogiri :

doc = Nokogiri::XML(res.body)

В этот момент у вас будет полностью проанализированный DOM, готовый для поиска, с использованием методов поиска Nokogiri, таких как search и at, или любого из связанных с ними методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...