使用这个[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的等效操作,有什么建议吗?
2条答案
按热度按时间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
个a0zr77ik2#
如果将常规字符串传递给
--data
或--data-binary
,如下所示那么就没有区别,值由相同的代码处理,这两个参数的作用完全相同。
但是curl也允许你告诉它从一个文件中读取
--data
或--data-binary
的内容,方法是传递@
,后面跟着一个文件路径:--data
只发送文件的第一行(实际上直到它看到的第一个\n
或\r
),而--data-binary
将按原样发送整个文件(实际上它将发送文件的第一个GiB(1024*1024 * 1024字节))。