curl -d vs --data-binary

sra*_*rth 4 curl node.js prometheus

使用这个 [ https://github.com/prometheus/pushgateway][1]我们试图将一个指标推送到 prometheus。它似乎需要非常特定格式的数据。

在做他们的示例卷曲时它工作正常

echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
Run Code Online (Sandbox Code Playgroud)

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

curl -d 'some_metric 3.15\n' http://pushgateway.example.org:9091/metrics/job/some_job
Run Code Online (Sandbox Code Playgroud)

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

关于 -d 和 --data-binary 之间的区别以及在 node.js 中执行与 --data-binary 等效的提示的任何建议?

Sta*_*yuk 8

从 curl 手册页:

--data-ascii

(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”。

如果您希望 curl 在发送前去除新行,请使用--data-ascii-d选项:

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