Curl -d与--数据二进制

kkih6yb8  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(338)

使用这个[https://github.com/prometheus/pushgateway][1],我们试图将一个指标推送给普罗米修斯。它似乎需要一个非常特定格式的数据。
在执行他们的示例curl

echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job

然而,使用-d选项执行curl会失败,因为缺少行/文件结尾

curl -d 'some_metric 3.15\n' http://pushgateway.example.org:9091/metrics/job/some_job

我试图了解行为上的差异,因为我认为两者都在执行POST命令,我需要通过“www.example.com“方法在node.js中复制这个--data-binary选项request.post,但我似乎只能复制curl -d选项,该选项不起作用。
关于-d和--data-binary之间的区别以及如何在node.js中执行--data-binary的等效操作,有什么建议吗?

3pvhb19x

3pvhb19x1#

来自curl手册页:

--数据-ascii

(HTTP)这只是-d,--data的别名。

--数据-二进制

(HTTP)这将完全按照指定的方式发布数据,而不进行任何额外的处理。
如果数据以字母@开头,那么剩下的部分应该是文件名。数据以类似于-d,--data的方式被传递,除了换行符和回车被保留,并且从不进行转换。
和-d,--data一样,发送到服务器的默认内容类型是application/x-www-form-〉〉urlencoded.如果你想让服务器把数据当作任意的二进制数据,那么就把内容类型设置为octet-stream:-H“内容类型:应用程序/八位字节流”。
如果多次使用此选项,则第一个选项后面的选项将按照-d,--data中的说明添加数据。
使用@-将使curl从stdin读取文件名。
因此,基本上在第一个变体中,您发送了一个名为“some_metric 3.14”的二进制文件,而在第二个变体中,您发送了一个ASCII字符串“some_metric 3.15\n”。
如果希望curl在发送前剥离新行,请使用**--data-ascii-d**选项:
echo "some_metric 3.14" | curl -d @- http://pushgateway.example.org:9091/metrics/job/some_job

a0zr77ik

a0zr77ik2#

如果将常规字符串传递给--data--data-binary,如下所示

curl --data somekey=somevalue example.com

那么就没有区别,值由相同的代码处理,这两个参数的作用完全相同。
但是curl也允许你告诉它从一个文件中读取--data--data-binary的内容,方法是传递@,后面跟着一个文件路径:

curl --data @./some/path/to/a/file.txt example.com

--data只发送文件的第一行(实际上直到它看到的第一个\n\r),而--data-binary将按原样发送整个文件(实际上它将发送文件的第一个GiB(1024*1024 * 1024字节))。

相关问题