파일에서 가져온 게시물 데이터로 컬 요청을 보내는 방법

파일에서 가져온 게시물 데이터로 컬 요청을 보내는 방법

아래에 잘 작동하는 컬 명령이 있고 응답을 다시 받습니다. json 데이터를 도달한 후 응답을 다시 제공하는 엔드포인트에 게시하고 있습니다.

curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary '{"query":"\n{\n  data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"}' --compressed

이제 외부 파일에서 바이너리 데이터를 읽으려고 하는데 temp.txt어떻게든 작동하지 않고 오류가 발생합니다.

curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary "@/Users/david/Downloads/temp.txt" --compressed

temp.txt아래는 내 파일 에 있는 내용입니다 .

원본 "temp.txt" 파일

{
  data(clientId: 1234, filters: [{key: "o", value: 100}], key: "world") {
    title
    type
    pottery {
      text
      pid
      href
      count
      resource
    }
  }
}

이것은 내가받는 오류입니다 -

.......
* upload completely sent off: 211 out of 211 bytes
< HTTP/1.1 500 Internal Server Error
< date: Fri, 28 May 2021 23:38:12 GMT
< server: envoy
< content-length: 0
< x-envoy-upstream-service-time: 1
<
* Connection #0 to host url left intact
* Closing connection 0

내가 뭐 잘못한 게 있는 걸까?

temp.txt또한 원래 컬 명령에 포함된 파일 의 내용과 정확히 동일한 내용을 복사하면 \n제대로 작동합니다.

업데이트된 "temp.txt" 파일

즉, 이와 같은 콘텐츠를 파일에 보관하면 temp.txt두 번째 컬에서 제대로 작동합니다.

{"query":"\n{\n  data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"}

\n컬 요청을 보내기 전에 파일 에서 새 줄을 수동으로 변환하는 방법을 찾아야 한다는 뜻입니까 temp.txt? 아니면 다른 방법이 있습니까?

답변1

데이터 페이로드는 query키가 포함된 JSON 문서입니다. 해당 키의 값은 JSON으로 인코딩된 문서이며, 그 자체로는 JSON 문서가 아닌 쿼리 형식을 설명할 수 있습니다. 줄 바꿈은 JSON 값으로 인코딩되며 \n, 서버가 사용하는 JSON 파서는 요청을 받으면 이를 리터럴 줄 바꿈으로 변환합니다.

query디코딩된 값을 별도의 파일에 넣고 이를 호출에 전달하려는 시도는 curl실패합니다. 왜냐하면 대화 중인 API가기대한다데이터는 JSON으로 인코딩된 키 값이 포함된 JSON 문서입니다 query.

쿼리를 별도의 파일로 오프로드하기 위해 수행해야 할 올바른 작업은 마지막 예에서 수행한 작업을 정확하게 수행하는 것입니다. 인코딩된 쿼리가 포함된 JSON 문서를 파일에 넣고 명령줄 --data-binary @filename에서 이를 참조합니다 curl.

curl \
    --header 'Content-Type: application/json' \
    --data-binary '@/Users/david/Downloads/temp.txt' "$API_ENDPOINT"

관련 정보