2012-02-08 129 views
1

我需要將一個POST請求作爲XML字符串發送,但我得到的結果很奇怪。代碼:Ruby RestClient將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轉換爲散列。這是爲什麼?任何方式在這個?

回答

0

而不是使用RESTClient實現的,使用Ruby的內置Open::URIGET請求或類似Net::HTTP或令人難以置信的強大Typhoeus

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

在百頭巨怪,你會使用:

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

您的結果頁面(如果使用XML)將很容易使用Nokogiri解析:

doc = Nokogiri::XML(res.body) 

此時,您將使用Nokogiri的搜索方法(如searchat)或其任何相關方法準備好可以進行搜索的完全解析DOM。

2

試試這個:

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

我想你只需要指定「:接受」,讓它知道你想收到它的XML格式。假設它是你自己的服務器,你可以在服務器上調試,看到使用的請求格式可能是html。

希望有所幫助。

+0

服務器日誌仍然具有散列參數。 – 2012-02-09 15:43:21

+0

我在當前的項目中做了類似於上面的工作,並且按照我的預期工作。這正是我發送的內容:「response = RestClient.post(my_url,xml_body,{:content_type =>:xml,:accept =>:json,:cookies => @login_cookies})。response.body是一個字符串我之前發送了一個:accept =>:xml,並返回了字符串XML結果。至於發送xml_body,您可能需要發送「<?xml version =」1.0「encoding =」UTF -8「?>」xml header。我可能只是不明白這個問題,因爲我認爲我正在做你正在談論的內容 – 2012-02-10 04:01:59

+0

Rails將嘗試將XML主體解釋爲服務器上的資源/模型。不要這樣做,然後嘗試發送XML作爲參數變量,如':xml_data =>' text'',那麼它只是作爲轉義字符串對待,並且將保留在服務器上的字符串。 – 2012-02-10 04:11:32