Puedo crear un lugar con éxito 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 vuelve HTTP/1.1 201 Created
.
Ahora quiero almacenar la carga útil 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 falla al regresar HTTP/1.1 401 Unauthorized
. ¿Por qué?
--data-binary
.Respuestas:
curl
envía solicitudes POST con el tipo de contenido predeterminado deapplication/x-www-form-urlencoded
. Si desea enviar una solicitud JSON, deberá especificar el encabezado de tipo de contenido correcto:Pero eso solo funcionará si el servidor acepta la entrada json. El
.json
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 la API debería darle una pista sobre si lo hace o no.La razón por la que obtiene un
401
error y no otro es probablemente porque el servidor no puede extraerloauth_token
de su solicitud.fuente
cat file.json
después-d
y tuve problemas con él, hasta que aprendí de esta respuesta que puedo usar@file.json
. Gracias :)-H
/--header
varias veces, al menos cuando se prueba en bash en Ubuntu.