É possível usar curl e postar dados binários sem passar um nome de arquivo? Por exemplo, você pode postar um formulário usando binário via --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
No entanto, isso requer a existência de um arquivo. Eu esperava poder registrar chamadas HTTP (como descansar serviços) como o texto do comando curl para reproduzir a solicitação. (isso ajuda muito na depuração desses serviços, por exemplo)
No entanto, os comandos de log curl que referenciam um arquivo não seriam úteis, então eu esperava poder realmente registrar os dados binários brutos, presumivelmente codificados com base64, e ainda assim permitir copiar e colar o comando curl registrado e executá-lo.
Portanto, é possível usar curl e publicar dados binários sem fazer referência a um arquivo? Se sim, como isso funcionaria? Como seria um exemplo?
Respostas:
Você pode passar dados para curl via STDIN da seguinte forma:
O
@-
dizcurl
para puxar de STDIN.Para canalizar dados binários para enrolar (por exemplo):
fonte
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
onde\x03\xF1
estão os dados binários brutos como hexadecimais, que são exatamente o que eu quero.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Funcionou como um encanto. Para validar, também tentei:cat 1.jpg | md5sum
emd5sum 1.jpg
. Ambos retornaram o mesmo valor.Não sei por que, mas a linha de comando exata que o slm sugeriu não funcionou para mim. Com uma pequena modificação, o seguinte funcionou:
fonte
Adicionando a esta resposta, o
echo
comando anexa uma nova linha à sua saída por padrão. Isso adiciona um\n
ao final dos seus dados binários, portanto, o curl receberá esse caractere também como entrada.Para evitar isso, você pode usar o
printf
comando ou a-n
opção da seguinte maneira:ou
Dessa forma, nenhuma nova linha será anexada à entrada de ondulação e os bytes que estão sendo alimentados para ondulação serão exatamente aqueles para os quais você passa
echo
.fonte