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

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

아래에 컬 명령이 있는데 제대로 작동하고 응답을 받습니다. 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

데이터 페이로드는 키가 포함된 JSON 문서입니다 query. 이 키의 값은 특정 형태의 쿼리를 설명할 수 있는 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"

관련 정보