2014-01-06 47 views
3

我正在嘗試學習Ruby/Faraday。我需要將XML POST到一個RESTful Web服務,並且對如何執行此操作感到困惑。如何使用法拉第POST XML並接收響應?

我有一個包含XML如下字符串:

require "faraday" 
require "faraday_middleware" 
mystring = %&<xml><auth><user userid='username' pwd='password'/></auth></xml>& 

如何張貼XML的URL和接受的結果?我試圖做這樣的事情:

conn = Faraday.new(:url=>'http://url') 
conn.post '/logon' {mystring} 

我得到的消息:

SyntaxError: (irb):11: syntax error, unexpected '{', expecting $end 
conn.post '/logon' {mystring} 

編輯1 我已經得到了POST請求的工作。我的代碼在下面提供。

require "faraday" 
require "faraday_middleware" 

myString = %&<xml><auth><user userid='username' pwd='password'/></auth></xml>& 
myUrl = %&url& 

conn = Faraday.new(:url => myUrl) do |builder| 
    builder.response :logger #logging stuff 
    builder.use Faraday::Adapter::NetHttp #default adapter for Net::HTTP 
end 

res = conn.post do |request| 
    request.url myUrl 
    request.body = myString 
end 

puts res.body 

回答

3

According to the documentation

conn = Faraday.new(:url=>'http://url') 
conn.post '/logon', mystring 

有在你的代碼的兩個錯誤。第一個原因是您在URL和變量之間缺少逗號,導致{ mystring }被解釋爲塊。

第二個錯誤是mystring已經持有一個字符串,下面的代碼不會在Ruby中意義:

{ "string" } 

因此conn.post '/logon', mystring是錯誤的。所以,最後的結果是:

conn = Faraday.new(:url=>'http://url') 
conn.post '/logon', mystring 

或:

conn = Faraday.new(:url=>'http://url') 
conn.post '/logon', { :key => mystring } 

,如果你希望提交一個鍵/值POST體。但這不是你的情況,因爲你已經發布了一個XML主體。

+0

我該如何獲得迴應?我仍然在尋找一些「好」的文檔。任何參考? –

+0

響應應該從conn.post調用返回。看到這個:http://mislav.uniqpath.com/2011/07/faraday-advanced-http/ – wiebersk