Curl

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

  • August 26, 2018

我希望能夠在使用 curl 時生成系統納秒序列

我的程式碼是這樣的:

curl -X POST -H ‘內容類型:文本/xml’ -d @req.xml server_URL > result.xml

req.xml 包含以下內容:

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

所以請求中的期望值應該是這樣的:

2163586109424686

但相反,它給了我:

$ {= (System.nanoTime ())}

以納秒為單位將其轉換為系統計時器的任何方式。

不幸的是,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中,$(...)"引號的字元串會將命令的輸出插入另一個命令的參數中。這將生成一個 sed 命令,將所有實例替換${TIME}為目前時間。curl 參數-d @-使它從標準輸入讀取 POST 數據。雖然您可以保留每個表達式的語法,但我認為這不值得。

引用自:https://unix.stackexchange.com/questions/464897