在不使用@file的情况下将二进制数据传递给curl

在不使用@file的情况下将二进制数据传递给curl

是否可以使用curl 并发布二进制数据而不传递文件名?例如,您可以通过 --data-binary 使用二进制发布表单:

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

然而,这需要一个文件存在。我希望能够将 HTTP 调用(例如休息服务)记录为 curl 命令的文本以重现请求。 (例如,这极大地有助于调试这些服务)

然而,记录引用文件的curl命令是没有用的,所以我希望我能够实际记录原始二进制数据(大概是base64编码的),但仍然允许您复制和粘贴记录的curl命令并执行它。

那么,是否可以使用curl 并发布二进制数据而不引用文件?如果是这样,那将如何运作?一个例子会是什么样子?

答案1

您可以通过 STDIN 将数据传递到curl,如下所示:

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

告诉我们@-curlSTDIN 拉入。

将二进制数据通过管道传递给curl(例如):

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

答案2

添加到答案,该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

答案3

不知道为什么,但 slm 建议的确切命令行对我不起作用。经过稍微修改,以下内容有效:

echo -e '...data...\n' | curl -s -T - sftp://[email protected]/~/test.txt

相关内容