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