卷曲-d vs --data-binary

时间:2018-11-15 11:53:59

标签: node.js curl prometheus

使用此[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 -d 'some_metric 3.15\n' http://pushgateway.example.org:9091/metrics/job/some_job

我试图了解行为上的差异,因为我相信两者都在执行POST命令,因此我需要通过“ request.post”方法在node.js中复制此--data-binary选项,但我似乎只是能够复制curl -d选项不起作用。

关于-d和--data-binary之间有什么区别的提示的任何建议,以及如何在node.js中执行--data-binary的等效操作?

1 个答案:

答案 0 :(得分:1)

在curl手册页中:

  

-数据关联

     

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

     

-数据二进制文件

     

(HTTP)这将完全按照指定的方式发布数据,而无需任何额外的处理。

     

如果以字母@开头的数据,其余的应该是文件名。数据的发布方式与-d相似,--data的发布方式类似,除了保留换行符和回车符>>且永远不会进行转换。

     

与-d,--data一样,发送到服务器的默认内容类型为application / x-www-form->> urlencoded。如果希望服务器将数据视为任意二进制数据,则将内容类型设置为八位字节流:-H“ Content-Type:application / octet-stream”。

     

如果多次使用此选项,则第一个之后的选项将按-d,--data中所述>附加数据。

使用@-将使curl从 stdin 中读取文件名。

因此,基本上,在您的第一个变体中,您发送一个名为“ some_metric 3.14”的二进制文件。 在第二个中,您将发送一个ascii字符串“ some_metric 3.15 \ n”。

如果要卷曲在发送前去除新行,请使用-data-ascii -d 选项:

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