curl json post solicitud a través de terminal a una aplicación de rieles


109

Estoy tratando de crear un usuario en mi aplicación rails con un comando curl desde el terminal os x. No importa cómo formatee los datos, la aplicación devuelve respuestas que ninguna de mis validaciones ha pasado.

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

Probé todas las variaciones. Intenté usar [] corchetes, probé user = {data ..} y nada parece funcionar. ¿Algunas ideas?


¿Por qué no usar $ rails cy User.create :first_name => 'John', :last_name => 'Smith', ...?
coreyward

23
@coryward: Eso frustraría todo el propósito de una API.
Wukerplank

realmente me tiene perplejo
chris sun

Hola, Bob tal vez encontró el problema, pero en caso de que pudiera ayudar, aquí hay una publicación que encontré ayer: squarism.com/2011/04/01/how-to-write-a-ruby-rails-3-rest-api Se trata de XML, pero podría ayudar. Atentamente.
plang

Respuestas:


227

En primer lugar, hay un "extraño" al final de su comando.

Prueba esto

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

eso fue todo. Anoche me di cuenta de que necesita el tipo -H Accept y Content.
chris sun

Hola, estoy llamando a un script como este: abc.com/?a=4&b= {"x": "y"}. ¿Puedes decirme cómo se vería en la terminal curl?
user739711

hmmm en mi caso necesitaba rodear la URL de destino con comillas
Jonathan Lin

1
Pude quitar el modificador -v (detallado) y -H "Aceptar: ..." de lo anterior y todavía funciona bien para mí.
Dan

2
creo que también puede eliminar -X POST ya que está usando -d
Luke W
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.