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

时间:2014-01-06 19:12:00

标签: ruby faraday

我正在尝试学习Ruby / Faraday。我需要将XML发布到RESTful Web服务,并对如何执行此操作感到困惑。

我有一个包含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

1 个答案:

答案 0 :(得分:4)

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体。