Curl
在不使用@file 的情況下將二進制數據傳遞給 curl
是否可以在不傳入文件名的情況下使用 curl 並發布二進制數據?例如,您可以通過 –data-binary 使用二進制發布表單:
curl -X POST --data-binary @myfile.bin http://foo.com
但是,這需要一個文件存在。我希望能夠將 HTTP 呼叫(例如休息服務)記錄為 curl 命令的文本以重現請求。(例如,這極大地有助於調試這些服務)
但是,記錄引用文件的 curl 命令將沒有用,所以我希望我可以實際記錄原始二進制數據,大概是 base64 編碼,但仍然允許您複製和粘貼記錄的 curl 命令並執行它。
那麼,是否可以在不引用文件的情況下使用 curl 和發布二進制數據?如果是這樣,那將如何運作?一個例子會是什麼樣子?
您可以通過 STDIN 將數據傳遞到 curl 中,如下所示:
echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com
@-
告訴curl
從 STDIN 中拉入。將二進制數據通過管道傳送到 curl(例如):
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
添加到此答案中,該
echo
命令預設情況下會在其輸出中附加一個換行符。這會\n
在二進制數據的末尾添加一個,因此 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
.