파일 이름을 전달하지 않고 컬 및 포스트 바이너리 데이터를 사용할 수 있습니까? 예를 들어 --data-binary를 통해 바이너리 게시 형식을 사용할 수 있습니다.
curl -X POST --data-binary @myfile.bin http://foo.com
그러나 이를 위해서는 파일이 존재해야 합니다. 요청을 재현하기 위해 HTTP 호출(예: 나머지 서비스)을 컬 명령의 텍스트로 기록할 수 있기를 원합니다. (예를 들어, 이는 이러한 서비스를 디버깅하는 데 큰 도움이 됩니다.)
그러나 파일을 참조하는 컬 명령을 기록하는 것은 쓸모가 없으므로 실제로 원시 바이너리 데이터(아마도 base64로 인코딩됨)를 기록할 수 있지만 기록된 컬 명령을 복사하여 붙여넣고 실행할 수 있기를 바랍니다.
그렇다면 파일을 참조하지 않고 컬(curl)과 포스트 바이너리 데이터(binary data)를 사용하는 것이 가능할까요? 그렇다면 어떻게 작동할까요? 예를 들면 어떤 것 같나요?
답변1
다음과 같이 STDIN을 통해 컬에 데이터를 전달할 수 있습니다.
echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com
STDIN @-
에서 가져오라고 지시합니다 .curl
컬링할 바이너리 데이터 파이프(예:):
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
답변2
에 추가하다이것답변, 이 echo
명령은 기본적으로 출력에 개행을 추가합니다. 그러면 \n
이진 데이터 끝에 1이 추가되므로 컬도 해당 문자를 입력으로 받습니다.
printf
이를 방지하려면 다음과 같은 명령 이나 스위치를 사용할 수 있습니다 -n
.
printf '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
또는
echo -en '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
이렇게 하면 컬의 입력에 개행 문자가 추가되지 않으며 컬에 전달된 바이트는 컬에 전달한 바이트와 정확히 같습니다 echo
.
답변3
이유는 모르겠지만 slm에서 제안한 정확한 명령줄이 작동하지 않습니다. 약간 수정하면 다음이 작동합니다.
echo -e '...data...\n' | curl -s -T - sftp://[email protected]/~/test.txt