curl json post demande via un terminal vers une application de rails

109

J'essaie de créer un utilisateur sur mon application rails avec une commande curl du terminal os x. Quelle que soit la façon dont je formate les données, l'application renvoie une réponse que aucune de mes validations n'a réussi.

curl http://localhost:3000/api/1/users.json -i -X POST -d {"user":{"first_name":"firstname","last_name":"lastname","email":"[email protected]","password":"app123","password_confirmation":"app123"}}"

J'ai essayé toutes les variantes. J'ai essayé d'utiliser [] crochets, j'ai essayé user = {data ..} et rien ne semble fonctionner. Des idées?

chris soleil
la source
Pourquoi ne pas simplement utiliser $ rails cet User.create :first_name => 'John', :last_name => 'Smith', ...?
coreyward
23
@coryward: Cela irait à l'encontre de l'objectif global d'une API.
Wukerplank
il m'a vraiment perplexe
chris sun
Salut, Bob a peut-être trouvé le problème, mais au cas où cela pourrait aider, voici un post que j'ai trouvé hier: squarism.com/2011/04/01/how-to-write-a-ruby-rails-3-rest-api Il s'agit de XML, mais cela pourrait aider. Meilleures salutations.
plang le

Réponses:

227

Tout d'abord, il y a un "superflu" à la fin de votre commande.

Essaye ça

curl -v \
  -H "Accept: application/json" \
  -H "Content-type: application/json" \
  -X POST \
  -d ' {"user":{"first_name":"firstname","last_name":"lastname","email":"[email protected]","password":"app123","password_confirmation":"app123"}}' \
  http://localhost:3000/api/1/users
Bob
la source
c'était ça. J'ai compris hier soir qu'il avait besoin du type -H Accept et Content-type.
chris soleil
Salut, je viens d'appeler un script comme celui-ci: abc.com/?a=4&b= {"x": "y"}. Pouvez-vous me dire à quoi cela ressemblerait dans le terminal curl?
user739711
hmmm dans mon cas, j'avais besoin d'entourer l'URL cible de guillemets
Jonathan Lin
1
J'ai pu supprimer le commutateur -v (verbeux) et -H "Accepter: ..." de ce qui précède et cela fonctionne toujours très bien pour moi.
Dan
2
pense que vous pouvez également supprimer -X POST depuis que vous utilisez -d
Luke W