2015-11-24 2 views
1

Pour une raison quelconque, lorsque je l'exécute dans ma console Rails, cela ne fonctionne pas.Autorisation JSON Rest-Client dans Rails

RestClient.post 'http://localhost/WebService/AuthenticateLogin', :content_type => :json, {:params => {:RuntimeEnvironment => 1, 'Email' => '[email protected]', 'Password' => 'Pa$$worD'}} 

La partie étrange est quand je fais la même chose avec cURL cela fonctionne parfaitement bien:

curl -H "Content-Type: application/json" -d '{"RuntimeEnvironment":1,"Email":"[email protected]","Password":"Pa$$worD"}' -X POST http://localhost/WebService/AuthenticateLogin 

Voici mon stacktrace:

SyntaxError: (irb):33: syntax error, unexpected '\n', expecting => 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command! 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

Et parce que je pense qu'il peut être pertinent , J'ai utilisé cette déclaration aussi:

RestClient.post 'http://localhost/WebService/AuthenticateLogin', :content_type => :json, :params => {:RuntimeEnvironment => 1, 'Email' => '[email protected]', 'Password' => 'Pa$$worD'} 

Et a obtenu ce que mon stacktrace:

RestClient.post "http://localhost/WebService/AuthenticateLogin", "content_type=json&params[RuntimeEnvironment]=1&params[Email]=someone%40example.com&params[Password]=Pa$$worD", "Accept"=>"*/*; q=0.5, application/ 
xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"114", "Content-Type"=>"application/x-www-form-urlencoded" 
# => 400 BadRequest | text/html 2738 bytes 
RestClient::BadRequest: 400 Bad Request 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:48:in `return!' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in `process_result' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit' 
     from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:852:in `start' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/rest-client-1.6.7/lib/restclient.rb:72:in `post' 
     from (irb):34 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
     from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

J'ai parcouru Stack et essayé différentes façons de liste les params, déplacer/enlever le content_type, etc. Rien ne fonctionne pour moi.

Répondre

0

J'ai remarqué mon content_type n'a pas été mis à jour, il cherchai et StackOverflow venu par pour moi. How do I make Ruby's RestClient gem respect content_type on post?

Je fondamentalement juste changé ma demande d'être:

RestClient.post 'http://localhost/WebService/AuthenticateLogin', '{"RuntimeEnvironment":1, "Email":"[email protected]", "Password":"Pa$$worD"}', :content_type => "json" 

Je citations ajouté simplement autour de mes params comme ceci: '{params}' Et au lieu d'utiliser => dans les params, j'ai changé pour côlons tout comme la demande réelle j'ai utilisé dans cURL et tout a fonctionné comme un charme.

Notez également que j'ai cité le "json" content_type.

Merci @rlarcombe pour votre aide.

1

Vous n'avez pas besoin d'imbriquer les paramètres comme cela. Il suffit de faire:

RestClient.post 'http://localhost/WebService/AuthenticateLogin', {"RuntimeEnvironment" => 1, 'Email' => '[email protected]', 'Password' => 'Pa$$worD'}, :content_type => :json 
+0

Merci pour la réponse rapide. J'avais déjà essayé cela et j'ai eu la même erreur que la deuxième pile que j'ai publiée. J'ai double et triple vérifié ma demande et il est compatible avec la demande de travail cURL. :( – aishaq11

+0

Selon le second stacktrace, mon content_type ne semble pas avoir traversé? Ma syntaxe pour cela semble bien .. – aishaq11