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é?
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.
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