Cómo pasar carga útil a través de archivo JSON para curl?


Puedo crear un lugar con éxito a través de curl ejecutando el siguiente comando:

$ curl -vX POST https://server/api/v1/places.json -d "
  auth_token=B8dsbz4HExMskqUa6Qhn& \
  place[name]=Fuelstation Central& \
  place[city]=Grossbeeren& \
  place[address]=Buschweg 1& \
  place[latitude]=52.3601& \
  place[longitude]=13.3332& \
  place[washing]=true& \
  place[founded_at_year]=2000& \
  place[products][]=diesel& \
  place[products][]=benzin \
"

El servidor devuelve HTTP/1.1 201 Created.
Ahora quiero almacenar la carga útil en un archivo JSON que se vea así:

// testplace.json
{
  "auth_token" : "B8dsbz4HExMskqUa6Qhn",
  "name" : "Fuelstation Central",
  "city" : "Grossbeeren",
  "address" : "Buschweg 1",
  "latitude" : 52.3601,
  "longitude" : 13.3332,
  "washing" : true,
  "founded_at_year" : 2000,
  "products" : ["diesel","benzin"]
}

Así que modifico el comando para que se ejecute así:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json

Esto no devuelve HTTP/1.1 401 Unauthorized. ¿Por qué?

 128
Author: whirlwin, 2013-09-04

1 answers

curl envía solicitudes POST con el tipo de contenido predeterminado de application/x-www-form-urlencoded. Si desea enviar una solicitud json, tendrá que especificar el encabezado de tipo de contenido correcto:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

Pero eso solo funcionará si el servidor acepta la entrada json. El .json al final de la url solo puede indicar que el output es json, no significa necesariamente que también manejará json input. La documentación de la API debe darle una pista sobre si lo hace o no.

El la razón por la que obtienes un 401 y no algún otro error es probablemente porque el servidor no puede extraer el auth_token de tu solicitud.

 214
Author: mata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 17:12:04