usando curl com $ {= (System.nanoTime ())} dentro do arquivo req.xml

0

Eu quero poder gerar nano segunda seqüência do sistema ao usar o curl

meu código é assim:

curl -X POST -H 'Content-type: text/xml' -d @req.xml server_URL > result.xml

o req.xml contém o seguinte:

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

para que o valor esperado na solicitação seja assim:

2163586109424686

mas em vez disso está me dando:

${=(System.nanoTime())}

qualquer maneira de convertê-lo em temporizador do sistema, em nanossegundos.

    
por ammar 26.08.2018 / 11:55

1 resposta

0

Infelizmente, o cURL não possui um mecanismo nativo para interpolação de valores. No entanto, você pode usar um pouco de sed magic para substituir:

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

O comando date exibirá a hora atual no formato especificado. %s é o número de segundos desde a época do UNIX e %N é o número de nanossegundos do segundo atual.

No bash, $(...) em uma string " -quoted inserirá a saída de um comando em um parâmetro de outro. Isso gerará um comando sed que substitui todas as instâncias de ${TIME} pela hora atual. O parâmetro curl -d @- faz com que ele leia os dados POST do stdin. Embora você possa manter a sintaxe de cada expressão, não acho que valha a pena.

    
por 26.08.2018 / 12:57

Tags