Как передать полезную нагрузку через 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. Зачем?

490   1  

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

    Ничего не найдено.