Как передать полезную нагрузку через JSON-файл для curl?
Я могу успешно создать место через 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. Зачем?
1 ответ:
curlотправляет запросы POST с типом контента по умолчаниюapplication/x-www-form-urlencoded. Если вы хотите отправить запрос json, вам нужно будет указать правильный заголовок типа контента:$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \ --header "Content-Type: application/json"но это будет работать только в том случае, если сервер принимает ввод json. Элемент
.jsonВ конце url может указывать только на то, что выход это json, это не обязательно означает, что он также будет обрабатывать json input. Документация по API должно дать вам подсказку о том, есть или нет.причина, по которой вы получаете
401и не какая-то другая ошибка, вероятно, потому, что сервер не может извлечьauth_tokenиз вашего запроса.
Comments