curl json post request via terminal para um aplicativo Rails

109

Estou tentando criar um usuário no meu aplicativo rails com um comando curl do terminal os x. Não importa como eu formate os dados, o aplicativo retorna uma resposta que nenhuma das minhas validações passou.

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

Tentei todas as variações. Tentei usar [] colchetes, tentei user = {data ..} e nada parece funcionar. Alguma ideia?

Chris Sun
fonte
Por que não usar apenas $ rails ce User.create :first_name => 'John', :last_name => 'Smith', ...?
coreyward de
23
@coryward: Isso anularia todo o propósito de uma API.
Wukerplank
realmente me deixou perplexo
chris sun
Olá, Bob talvez tenha encontrado o problema, mas caso possa ajudar, aqui está uma postagem que encontrei ontem: squarism.com/2011/04/01/how-to-write-a-ruby-rails-3-rest-api É sobre XML, mas pode ajudar. Cumprimentos.
plang

Respostas:

227

Em primeiro lugar, existe um estranho "no final do seu comando.

Tente isto

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
Prumo
fonte
foi isso. Eu descobri ontem à noite que ele precisa do -H Aceitar e do tipo de conteúdo.
chris sun
Olá, estou chamando um script como este: abc.com/?a=4&b= {"x": "y"}. Você pode me dizer como ficaria no terminal curl?
user739711
hmmm no meu caso, eu precisava colocar o URL de destino entre aspas
Jonathan Lin
1
Consegui remover a opção -v (detalhado) e -H "Aceitar: ..." acima e ainda funciona bem para mim.
Dan
2
acho que você pode remover -X POST também, já que você está usando -d
Lucas W