@file을 사용하지 않고 바이너리 데이터를 컬링에 전달합니다.

@file을 사용하지 않고 바이너리 데이터를 컬링에 전달합니다.

파일 이름을 전달하지 않고 컬 및 포스트 바이너리 데이터를 사용할 수 있습니까? 예를 들어 --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

관련 정보