2010-06-08 8 views
4

RestClient 루비 API로 Sinatra 앱에 JSON 데이터를 보내려고합니다. 클라이언트에서RestClient 및 Sinatra를 사용하여 JSON 보내기 및 받기

(client.rb) (사용 위해 RESTClient의 API) 서버에서

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

(시나) 나는

/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 

모든 내가 원하는 다음과 같은 오류를 얻을

require "rubygems" 
require "sinatra" 


post '/solve/:data' do 

    jdata = params[:data] 

    for_json = JSON.parse(jdata) 

end 

JSON 데이터를 보내고 RestClient와 Sinatra를 사용하여 JSON 데이터를 다시받는 것입니다. 그러나 무엇을 시도해도 위의 오류가 발생합니다. 나는 이것을 3 시간 동안 붙 들었다. 도와주세요

답변

14

귀하의 sinatra 응용 프로그램은 http://localhost:4567/solve URL과 일치하지 않으므로 서버에서 404를 반환합니다.

require "rubygems" 
require "sinatra" 


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

당신은 너무 당신의 위해 RESTClient 요청에 문제가 :

당신은 예를하여시나 응용 프로그램을 변경해야합니다. jdata의 params 이름을 정의해야합니다.

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

을 그리고 이것을 시도 :

response = RestClient.post 'http://localhost:4567/solve', {:data => jdata}, {:content_type => :json, :accept => :json} 
+0

나는 코드를 사용했다. 하지만 난 여전히 그 prob를 얻을 – Anand

+0

난 내 sintara 서버를 다시하지 않았다 .. 그게 prob ..;) 귀하의 코드는 달콤한처럼 일했다. – Anand

0

이 시도

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

나는 그것을 테스트하지 않았다하지만 어쩌면 당신은 키가 아닌 값으로 JSON 데이터를 전송한다. 데이터가 다음과 같이 표시 될 수 있습니다 : {: key => ''나는 값 '} => 없음. 귀하의 데이터는 URL에 전혀 필요하지 않습니다./solve/: 데이터 URL이 필요하지 않습니다. POST 값이 URL 당신이 당신의 경로에서받을 무엇을 디버깅하는 좋은 방법 보낼 수 없습니다 것은 PARAMS을 인쇄하는 것입니다 :

puts params 

희망이 도움이!

관련 문제