2011-11-08 8 views
10

Configuré una aplicación de rieles nuevos y simples con entrada de modelo, con los atributos title y content utilizando andamios.Datos POST JSON para la aplicación de rieles simples con rizo

ahora estoy tratando de usar curl para POSTAR los datos JSON (en lugar de usar el navegador).

la siguiente parece funcionar (es decir, publicado con éxito con datos nulos):

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "" http://localhost:3000/entries 

el siguiente no funciona:

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "{'content':'I belong to AAA','title':'AAA'}" http://localhost:3000/entries 

He intentado muchas variaciones. los errores que obtengo son en su mayoría host token no encontrado o inesperado en los datos JSON.

Respuesta

6

para ir junto con lo que Jonathan dijo , el mensaje ahora está enviando los datos al EntriesController. Ahora, en su acción create, debe obtener los datos del hash params. Voy a suponer que usted está haciendo de la manera railsy y por lo que haría algo como esto:

curl -d 'entry[content]=I belong to AAA' -d entry[title]=AAA http://localhost:3000/entries' 

En su controlador

Entry.create(params[:entry]) 

Esto dice agarrar la "entrada" de datos a partir del hash params (creado por Rails para usted) y pasarlo como un parámetro a la Entrada para inicializar un nuevo Objeto. "crear" hará una "nueva" y "guardar" para usted en una llamada a un método.

+0

problema resuelto. muchas gracias. Jonathan nos hizo comenzar en el camino correcto. gracias. – delta2006

2

me hizo una prueba y consiguió el error MultiJson::DecodeError (743: unexpected token at '{'content':'I belong to AAA','title':'AAA'}'):

JSON requiere comillas dobles para llaves y cadenas, no comillas simples. Trate --data '{"content":"I belong to AAA","title":"AAA"}'

+0

gracias, pero aún se obtiene el error 743, incluso con su sugerencia. Me pregunto si de alguna manera la aplicación no está esperando o no me gusta este JSON datos que estoy tratando de PUBLICAR. es una aplicación de rieles simple creada por rails new y el modelo es por rieles generar andamios. – delta2006

+0

En realidad, esta solución suponía que quería pasar JSON en el cuerpo de la solicitud, que es diferente de los datos de POST como lo hace un navegador. Para imitar un navegador, simplemente use 'curl -d 'content = Pertenezco a AAA' -d title = AAA http: // localhost: 3000/entries' –

+0

Started POST"/entries "para 127.0.0.1 a 2011-11- 09 07:46:48 -0500 Procesando por EntriesController # create as */* Parámetros: {"content" => "Pertenezco a AAA", "title" => "AAA"} ← [1m ← [35mSQL (0.0ms) ← [0m INSERT INTO "entries" ("content", "created_at", "tit le", "updated_at") VALORES (?,?,?,?) [["Content", nil], ["created_at", Wed, 0 9 nov. 2011, 12:46:48 UTC +00: 00], ["title", nil], ["updated_at", mié, 09 nov. 2011 12:46:48 UTC + 00:00]] Redirigido a http: // localhost: 3000/entries/46 Completado 302 Encontrado en 0ms – delta2006

0

tomar un bloque de JSON

{\"a\":\"this_is_a\"} 

y el URL de codificación que

%7B%22a%22%3A%22this_is_a%22 

y luego usar curl para publicarlo

curl -i --data "working_params=%7B%22a%22%3A%22this_is_a%22" http://url/accepts/json 
+0

¿Puedes mostrar la "parte codificada en la url"? –

+0

Hora de explorar. Pruebe: http://meyerweb.com/eric/tools/dencoder/ para comenzar. – sorens

+0

$$$$$$$$ ¡Gracias! –

Cuestiones relacionadas