[json] curl을 위해 JSON 파일을 통해 페이로드를 전달하는 방법은 무엇입니까?

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



답변

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 입력을 허용하는 경우에만 작동합니다. .jsonURL의 끝에이 있음을 나타냅니다 만 할 수있다 출력은 JSON, 그것은 반드시 또한 json으로 처리하는 것을 의미하지 않는다 입력 . API 문서는 API의 유무에 대한 힌트를 제공해야합니다.

이유 당신은 얻을 401및 서버가 압축을 할 수 없기 때문에하지 다른 오류가 아마도 auth_token귀하의 요청에서.


답변