4

Ruby/ファラデーを学ぼうとしています。XML を RESTful Web サービスに POST する必要があり、その方法について混乱しています。

次のような 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
4

1 に答える 1

4

ドキュメントによると

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

コードに 2 つのエラーがあります。1 つ目は、URL と変数の間にカンマがなく{ mystring }、ブロックとして解釈されることです。

2 番目のエラーは、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 本体を投稿しているためです。

于 2014-01-06T19:17:05.540 に答える