![在 req.xml 文件中使用带有 ${=(System.nanoTime())} 的curl](https://linux22.com/image/143741/%E5%9C%A8%20req.xml%20%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20%24%7B%3D(System.nanoTime())%7D%20%E7%9A%84curl.png)
我希望在使用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 数据。虽然您可以保留每个表达式的语法,但我认为这是不值得的。