4

RestClientrubyAPIを使用してJSONデータをSinatraアプリに送信しようとしています。

client(client.rb)で(RestClient APIを使用)

response = RestClient.post 'http://localhost:4567/solve', jdata, :content_type => :json, :accept => :json

サーバーで(シナトラ)

require "rubygems"
require "sinatra"


post '/solve/:data' do 

  jdata = params[:data]

  for_json = JSON.parse(jdata)

end

次のエラーが発生します

/Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/abstract_response.rb:53:in `return!': Resource Not Found (RestClient::ResourceNotFound)
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/request.rb:193:in `process_result'
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/request.rb:142:in `transmit'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:543:in `start'
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/request.rb:139:in `transmit'
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/request.rb:56:in `execute'
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient/request.rb:31:in `execute'
    from /Library/Ruby/Gems/1.8/gems/rest-client-1.5.1/lib/restclient.rb:72:in `post'
    from client.rb:52

私が欲しいのは、RestClientとSinatraを使用してJSONデータを送信し、JSONデータを受信することだけです。しかし、何をしようとしても、上記のエラーが発生します。私はこれで3時間立ち往生しています。助けてください

4

2 に答える 2

14

sinatra アプリはhttp://localhost:4567/solve URL と一致しないため、サーバーから 404 が返されます。

例によってsinatraアプリを変更する必要があります:

require "rubygems"
require "sinatra"


post '/solve/?' do 
  jdata = params[:data]
  for_json = JSON.parse(jdata)
end

RestClient リクエストにも問題があります。jdata の params 名を定義する必要があります。

response = RestClient.post 'http://localhost:4567/solve', {:data => jdata}, {:content_type => :json, :accept => :json}
于 2010-06-08T12:31:53.760 に答える
0

これを試して:

jdata = {:key => 'I am a value'}.to_json    
response = RestClient.post 'http://localhost:4567/solve', :data => jdata, :content_type => :json, :accept => :json

そして、これを試してください:

post '/solve' do 
  jdata = JSON.parse(params[:data])
  puts jdata
end

私はそれをテストしませんでしたが、json データをキーではなく値として送信する必要があるかもしれません。データが次のようになっている可能性があります: {:key => 'I am a value'} => nil. あなたのデータは必ずしもURLにある必要はありません。/solve/:data url は必要ありません。POST 値は URL で送信されません。ルートで受信したものをデバッグする良い方法は、パラメーターを出力することです。

puts params

お役に立てれば!

于 2011-10-19T15:02:21.520 に答える