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@email.com","password":"app123","password_confirmation":"app123"}}"

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


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@email.com","password":"app123","password_confirmation":"app123"}}' \
  http://localhost:3000/api/1/users

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.