multiple - ¿Cómo pasar la carga útil a través del archivo JSON para curl?
curl post xml (1)
Puedo crear con éxito un lugar 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 en un archivo JSON que se ve 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"]
}
Entonces 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é?
curl
envía solicitudes POST con el tipo de contenido predeterminado de application/x-www-form-urlencoded
. Si desea enviar una solicitud json, deberá 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 la salida es json, no necesariamente significa que también manejará la entrada json. La documentación de API debería darle una pista de si lo hace o no.
La razón por la que obtienes un error 401
y no otro es probablemente porque el servidor no puede extraer el auth_token
de tu solicitud.