標準入力またはローカルファイルのヘッダーをリモートカールに渡すには?

標準入力またはローカルファイルのヘッダーをリモートカールに渡すには?

次のcurlコマンドは期待どおりに機能します。

$ 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
...

私のカスタムヘッダー()を見ることはできますが、次のようFoo:Barに実行すると機能しません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
...

以下を使用して、stdinがリモートで動作していることを確認できます。

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

私の目標は、stdinまたはローカルファイル(変数ではなく)のヘッダーをリモートcurl

なぜ上記がうまくいかないのかわかりません。

ベストアンサー1

@filenameバージョン7.55.0では、forスタイルのパラメータ()が追加されました。-Hman curl

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

7.55.0以降、このオプションはスタイル引数を使用し、@filename入力ファイルの各行にヘッダーを追加できます。を使用すると、@-カールはstdinからヘッダーファイルを読み込みます。


ssh以前のバージョンを使用しているため、問題が発生します。curl

curlしたがって、デフォルトでは2つの異なるバージョンが関連しています。

$ 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

したがって、最新バージョン/usr/local/bin/curl(v7.59 / OpenSSL)へのパスをハードコードすると正常に動作するようです。

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

おすすめ記事