![세미콜론으로 구분된 문자열을 양식 데이터로 전달할 때 cURL "[건너뛰기] 알 수 없는 양식 필드" 발생](https://linux55.com/image/138797/%EC%84%B8%EB%AF%B8%EC%BD%9C%EB%A1%A0%EC%9C%BC%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EB%90%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%96%91%EC%8B%9D%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C%20%EC%A0%84%EB%8B%AC%ED%95%A0%20%EB%95%8C%20cURL%20%22%5B%EA%B1%B4%EB%84%88%EB%9B%B0%EA%B8%B0%5D%20%EC%95%8C%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%96%91%EC%8B%9D%20%ED%95%84%EB%93%9C%22%20%EB%B0%9C%EC%83%9D.png)
질문
cURL을 사용하여 API에 양식 데이터를 게시하려고 합니다.API 문서multipart/form-data
콘텐츠 유형을 허용한다고 선언합니다 .
이것은 스크립트의 일부이므로 문서화되어 있는 세미콜론으로 구분된 양식 필드 문자열을 구성하려고 합니다.cURL 문서에서.
내가 시도한 것
내가 뭘 할까?좋다스크립트에 전달된 매개변수를 기반으로 이 문자열을 쉽게 작성하기 위해 수행할 수 있는 작업은 다음과 같습니다.
local _payload="file=@file;username=name;content=hello"
echo "INFO payload: ${_payload}"
curl -i -F "${_payload}" "${url}"
$ ./myscript.sh <args>
# INFO payload: file=@file;username=name;content=hello -- my script
# Warning: skip unknown form field: username=name -- cURL
# Warning: skip unknown form field: content=hello -- cURL
cURL에서 이러한 경고가 표시되고 예상대로 API는 값을 가져오지 않습니다.
무엇하다작동하는 것은 각 필드를 자체 매개변수로 cURL에 전달하는 것입니다.
curl -i -F "file=@file" -F "username=name" -F "content=hello" "${url}"
...하지만 이는 프로그래밍 방식으로 설명하기에는 적합하지 않습니다.
두 경우 모두 파일이 올바르게 수신되고 처리된다는 점을 지적하기 위해 편집해야 합니다.
질문
이것이 내가 놓친 부분이라고 확신하지만 cURL 문서와 내가 요청하는 API를 자세히 살펴본 후에도 찾을 수 없습니다.cURL이 이러한 양식 필드를 건너뛰는 이유, 어떻게 방지/수정할 수 있나요?
답변1
확실히 Unix.SE에 첫 번째 질문을 게시한 후 저는 돌파구를 찾았습니다. 나는 문서를 다시 읽고 세미콜론으로 구분된 문자열을 잘못 사용하고 있다는 것을 (어쨌든 처음으로) 깨달았습니다.
문서세미콜론은 여러 필드를 구분하는 데 사용되지 않고 동일한 필드의 여러 특성을 구분하는 데 사용됨을 선언합니다. 이것이 내가 잘못한 곳입니다.
API 문서선언 엔드포인트는 URL로 인코딩된 JSON 페이로드를 payload_json
필드로 허용하므로 대신 다음을 수행했습니다.
local _json="payload_json=$(build_json)" # defined elsewhere
local _file="file=@file"
curl -i -F "${_file}" -F "${_json}" "${url}"
알다시피, 그것은 작동합니다. RTFD!