파일 이름을 전달하지 않고 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
는 @-
말한다 curl
STDIN에서 끌어.
이진 데이터를 컬로 파이프하려면 (예 🙂
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
입니다.