Ruby RestClient将XML转换为Hash

时间:2012-02-08 18:07:28

标签: ruby rest

我需要发送一个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 个答案:

答案 0 :(得分:2)

试试这个:

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

我认为您只需指定“:accept”即可让它知道您希望以XML格式接收它。假设它是您自己的服务器,您可以在服务器上进行调试,并查看使用的请求格式可能是html。

希望有所帮助。

答案 1 :(得分:0)

不使用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的搜索方法进行搜索,例如searchat,或任何相关方法。