Я могу успешно создать место, curl
выполнив следующую команду:
$ 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 \
"
Сервер возвращается HTTP/1.1 201 Created
.
Теперь я хочу сохранить данные в файле JSON, который выглядит следующим образом:
// 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"]
}
Поэтому я модифицирую команду для выполнения следующим образом:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json
Это не вернется HTTP/1.1 401 Unauthorized
. Зачем?
--data-binary
.Ответы:
curl
отправляет запросы POST с типом содержимого по умолчаниюapplication/x-www-form-urlencoded
. Если вы хотите отправить запрос JSON, вам нужно будет указать правильный заголовок типа контента:Но это будет работать только в том случае, если сервер принимает входные данные json. Знак
.json
в конце URL может указывать только на то, что выводом является json, это не обязательно означает, что он также будет обрабатывать ввод json . Документация по API должна дать вам подсказку о том, делает это или нет.Причина, по которой вы получаете
401
ошибку, а не какую-то другую, возможно, в том, что сервер не может извлечь ееauth_token
из вашего запроса.источник
cat file.json
после-d
и имел проблемы с ним, пока я не узнал из этого ответа, который я могу использовать@file.json
. Спасибо :)-H
/--header
несколько раз, по крайней мере, при тестировании в bash на Ubuntu.