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