Curl

在不使用@file 的情況下將二進制數據傳遞給 curl

  • October 2, 2019

是否可以在不傳入文件名的情況下使用 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.

引用自:https://unix.stackexchange.com/questions/77588