programing

JSON 파일을 통해 payload를 curl로 전달하려면 어떻게 해야 합니까?

lovejava 2023. 3. 20. 21:12

JSON 파일을 통해 payload를 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 파일에 payload를 저장합니다.

// 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-urlencodedJSON 요청을 전송하려면 올바른 콘텐츠유형 헤더를 지정해야 합니다.

$ 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당신의 요청으로부터.

게시할 JSON을 포함하는 파일을 실제로 지정하는 방법을 명확히 하려면 이 파일은@OP에 나타난 대로 서명하다

예를 들어, 로컬에의 전형적인 투고입니다.NET 코어 API:

curl -X POST https://localhost:5001/api -H "Content-Type: application/json" -d @/some/directory/some.json

넌 할 수 있다.cat의 내용물json까지 줄서다.curl경유로--data-raw파라미터

curl https://api.com/route -H 'Content-Type: application/json' --data-raw "$(cat ~/.json/payload-2022-03-03.json | grep -v '^\s*//')"

curl https://api.com/route -H 'Content-Type: application/json' -d @<(jq . ~/.json/payload-2022-03-03.json)

curl https://api.com/route -H 'Content-Type: application/json' -d @<(jq '{"payload": .}' < ~/.json/payload-2022-03-03.json)

주의: json 파일의 코멘트는, 다음의 방법으로 필터링 됩니다.grep -v '^\s*//'

데이터를 다음 주소로 전달할 수도 있습니다.curl경유로stdin사용.grep또는cat또는jq

grep -v '^\s*//' ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d @-

cat ~/.json/payload-2022-03-03.json | grep -v '^\s*//' | curl https://api.com/route -H 'Content-Type: application/json' -d @-

jq . ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d @-

jq '{"payload": .}' < ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d @-

언급URL : https://stackoverflow.com/questions/18611903/how-to-pass-payload-via-json-file-for-curl