curl json richiesta di post tramite terminale a un'app rails


109

Sto cercando di creare un utente sulla mia app rails con un comando curl dal terminale os x. Indipendentemente da come formatto i dati, l'app restituisce risposte che non sono state superate da nessuna delle mie convalide.

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

Ho provato ogni variazione. Ho provato a usare le parentesi [], ho provato user = {data ..} e niente sembra funzionare. Qualche idea?


Perché non usare $ rails ce User.create :first_name => 'John', :last_name => 'Smith', ...?
coreyward

23
@coryward: ciò vanificherebbe l'intero scopo di un'API.
Wukerplank

mi ha davvero sconcertato
chris sun

Ciao, Bob forse ha trovato il problema, ma nel caso potesse aiutare, ecco un post che ho trovato ieri: squarism.com/2011/04/01/how-to-write-a-ruby-rails-3-rest-api Si tratta di XML, ma potrebbe essere d'aiuto. I migliori saluti.
plang

Risposte:


227

Prima di tutto, c'è un estraneo "alla fine del tuo comando.

Prova questo

curl -v \
  -H "Accept: application/json" \
  -H "Content-type: application/json" \
  -X POST \
  -d ' {"user":{"first_name":"firstname","last_name":"lastname","email":"email@email.com","password":"app123","password_confirmation":"app123"}}' \
  http://localhost:3000/api/1/users

quello era. Ho scoperto ieri sera che necessita del tipo -H Accept e Content.
chris sun

Salve, ho chiamato uno script come questo: abc.com/?a=4&b= {"x": "y"}. Puoi dirmi come sarebbe nel terminale curl ??
user739711

hmmm nel mio caso avevo bisogno di racchiudere l'URL di destinazione tra virgolette
Jonathan Lin

1
Sono stato in grado di rimuovere l'opzione -v (verbose) e -H "Accept: ..." da sopra e funziona ancora bene per me.
Dan

2
pensa di poter rimuovere anche -X POST poiché stai usando -d
Luke W
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.