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


201

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
또한 바이너리 파일을 업로드하는 경우을 사용해야합니다 --data-binary.
AhmetB-Google

답변:


329

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귀하의 요청에서.


8
내가 사용하려고 한 cat file.json애프터 -d내가 사용할 수있는이 답변에서 배운 때까지, 그리고에 문제가 있었다 @file.json. 감사합니다 :)
shadi

1
다중 헤더가 필요한 경우 적어도 우분투의 bash에서 테스트 할 때 -H/ --header여러 번 지정해야합니다 .
Chaim Eliyah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.