如何使用法拉第POST XML并接收响应?

问题描述:

我正在尝试学习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 

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