Curl Json Post Anfrage über Terminal an eine Rails App

109

Ich versuche, einen Benutzer in meiner Rails-App mit einem Curl-Befehl vom OS X-Terminal zu erstellen. Unabhängig davon, wie ich die Daten formatiere, gibt die App Antworten zurück, die nicht von meinen Validierungen bestanden wurden.

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"}}"

Ich habe jede Variation ausprobiert. Ich habe versucht, [] Klammern zu verwenden, ich habe versucht, user = {data ..} und nichts scheint zu funktionieren. Irgendwelche Ideen?

Chris Sun.
quelle
Warum nicht einfach $ rails cund verwenden User.create :first_name => 'John', :last_name => 'Smith', ...?
Coreyward
23
@coryward: Das würde den gesamten Zweck einer API zunichte machen.
Wukerplank
es hat mich wirklich verblüfft
Chris Sun
Hallo, Bob hat das Problem vielleicht gefunden, aber falls es helfen könnte, hier ist ein Beitrag, den ich gestern gefunden habe: squarism.com/2011/04/01/how-to-write-a-ruby-rails-3-rest-api Es geht um XML, aber es könnte helfen. Freundliche Grüße.
Plang

Antworten:

227

Zunächst einmal gibt es eine fremde "am Ende Ihres Befehls.

Versuche dies

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
quelle
Das war's. Ich habe letzte Nacht herausgefunden, dass es den Typ -H Accept und Content braucht.
Chris Sun
Hallo, ich rufe ein Skript wie dieses auf: abc.com/?a=4&b= {"x": "y"}. Können Sie mir sagen, wie es im Curl-Terminal aussehen würde?
user739711
hmmm in meinem Fall musste ich die Ziel-URL mit Anführungszeichen umgeben
Jonathan Lin
1
Ich konnte den Schalter -v (ausführlich) und -H "Akzeptieren: ..." von oben entfernen und es funktioniert immer noch gut für mich.
Dan
2
Ich denke, Sie können -X POST auch entfernen, da Sie -d verwenden
Luke W