在 req.xml 文件中使用带有 ${=(System.nanoTime())} 的curl

在 req.xml 文件中使用带有 ${=(System.nanoTime())} 的curl

我希望在使用curl时能够生成系统纳秒序列

我的代码是这样的:

curl -X POST -H '内容类型:text/xml' -d @req.xml server_URL > result.xml

req.xml 包含以下内容:

<MessageSeq>${=(System.nanoTime())}</MessageSeq>

所以请求中的期望值应该是这样的:

2163586109424686

但它给了我:

${=(System.nanoTime())}

任何将其转换为系统计时器(以纳秒为单位)的方法。

答案1

不幸的是,cURL 没有用于值插值的本机机制。但是,您可以使用一些sed魔法来替代:

sed "s/\${TIME}/$(date +%s%N)/g" req.xml | curl -X POST -H 'Content-Type: text/xml' -d @- server.tld > result.xml

date命令将以指定的格式输出当前时间。%s是自 UNIX 纪元以来的秒数,%N是当前秒的纳秒数。

在 bash 中,$(...)"-quoted 字符串将一个命令的输出插入到另一个命令的参数中。这将生成一个 sed 命令,将 的所有实例替换${TIME}为当前时间。 curl 参数-d @-使其从 stdin 读取 POST 数据。虽然您可以保留每个表达式的语法,但我认为这是不值得的。

相关内容