使用[https://github.com/prometheus/pushgateway][1] 我们正试图把一个度量标准推给普罗米修斯。它似乎需要一种非常具体的格式的数据。
当他们做的例子卷曲时,它工作得很好
echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
然而,使用-d选项进行curl操作失败,因为缺少行末/文件
curl -d 'some_metric 3.15n' http://pushgateway.example.org:9091/metrics/job/some_job
我试图理解行为上的差异,因为我相信两者都在执行POST命令,我需要通过"request.POST"方法在node.js中复制这个--data二进制选项,但我似乎只能复制curl-d选项,但它不起作用。
关于-d和-data二进制之间的区别以及在node.js中对-data二进制进行等效操作,有什么建议吗?
来自curl手册页:
--数据ascii
(HTTP(这只是-d,--data的别名。
-数据二进制
(HTTP(这完全按照指定发布数据,无需任何额外处理。
如果数据以字母@开头,则其余部分应为文件名。数据已过帐>除了换行符和回车符>gt;保留和转换永远不会完成。
与-d、--data一样,发送到服务器的默认内容类型是application/x-www-form->gt;url编码。如果希望服务器将数据视为任意二进制数据>然后将内容类型设置为八位位组流:-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
-d
(或--data
(和--data-binary
完全相同,如果您只是传递这样的正常值:
curl --data somekey=somevalue example.com
但是,如果您告诉curl通过传递--data @filename
(或@-
从stdin读取(从文件中读取值,如下所示:
curl --data @./some/path/to/a/file.txt example.com
则不同之处在于--data
删除了文件中的所有n
和r
字符,而--data-binary
只是按原样发送文件。