@file을 사용하지 않고 바이너리 데이터를 넘겨주기 들어, 이러한

파일 이름을 전달하지 않고 curl 및 post 바이너리 데이터를 사용할 수 있습니까? 예를 들어 –data-binary를 통해 binary를 사용하여 양식을 게시 할 수 있습니다.

curl -X POST --data-binary @myfile.bin http://foo.com

그러나 파일이 있어야합니다. 요청을 재현하기 위해 curl 명령의 텍스트로 HTTP 호출 (예 : 서비스 휴식)을 기록 할 수 있기를 바랐습니다. (예를 들어, 이러한 서비스 디버깅에 크게 도움이됩니다)

그러나 파일을 참조하는 curl 명령을 기록하는 것은 유용하지 않으므로 base64로 인코딩 된 원시 이진 데이터를 실제로 기록 할 수는 있지만 여전히 기록 된 curl 명령을 복사하여 붙여 넣어 실행할 수 있기를 바랍니다.

따라서 파일을 참조하지 않고 curl 및 post 이진 데이터를 사용할 수 있습니까? 그렇다면 어떻게 작동합니까? 예는 어떻게 생겼습니까?



답변

STDIN을 통해 데이터를 curl에 전달할 수 있습니다.

echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com

@-말한다 curlSTDIN에서 끌어.

이진 데이터를 컬로 파이프하려면 (예 🙂

echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com


답변

왜 그런지 모르겠지만 slm이 제안한 정확한 명령 줄이 저에게 효과적이지 않았습니다. 약간의 수정으로 다음이 작동했습니다.

echo -e '...data...\n' | curl -s -T - sftp://user@10.10.10.10/~/test.txt


답변

에 추가 대답의 echo명령은 기본적으로 그 출력에 줄 바꿈을 추가합니다. 이것은 \n이진 데이터의 끝에 a 를 추가 하므로 curl은 해당 문자도 입력으로받습니다.

이를 피하기 위해 다음과 같이 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

이렇게하면 curl 입력에 줄 바꿈이 추가되지 않으며 curl에 공급되는 바이트는 정확하게 전달되는 바이트 echo입니다.


답변