Como passar o cabeçalho do arquivo stdin ou local para o curl remoto?

0

O comando curl a seguir funciona conforme o esperado:

$ curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"
* Rebuilt URL to: http://www.example.com/
...
> Accept: */*
> Foo:Bar
> 
< HTTP/1.1 200 OK
...

desde que eu possa ver meu cabeçalho personalizado ( Foo:Bar ), mas ele não funciona quando executado via ssh :

$ ssh user@localhost curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"
* Rebuilt URL to: http://www.example.com/
...
> Accept: */*
> 
< HTTP/1.1 200 OK
...

Posso confirmar que o stdin funciona no controle remoto por:

$ ssh user@localhost cat <<<"Foo:Bar"
Foo:Bar

Meu objetivo é passar os cabeçalhos do arquivo stdin ou local (não da variável) para o curl .

E não sei ao certo por que o acima não funciona.

    
por kenorb 02.05.2018 / 18:30

1 resposta

0

O argumento em @filename style para -H foi adicionado em 7.55.0 ( man curl ).

-H/--header <header/@file>

Starting in 7.55.0, this option can take an argument in @filename style, which then adds a header for each line in the input file. Using @- will make curl read the header file from stdin.

O problema com ssh aconteceu porque a versão curl mais antiga foi usada.

Então basicamente duas versões diferentes de curl estavam envolvidas.

$ which curl && curl --version
/usr/local/bin/curl
curl 7.59.0 (x86_64-apple-darwin17.3.0) libcurl/7.59.0 OpenSSL/1.0.2o zlib/1.2.11 libidn2/2.0.4
$ ssh user@localhost 'which curl && curl --version'
/usr/bin/curl
curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0

Então, codificando o caminho para o novo /usr/local/bin/curl (v7.59 / OpenSSL), parece funcionar bem:

$ ssh user@localhost /usr/local/bin/curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"
    
por 02.05.2018 / 18:39

Tags