以下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
...
我可以通过以下方式确认标准输入在遥控器上是否有效:
$ ssh user@localhost cat <<<"Foo:Bar"
Foo:Bar
我的目标是将标头从 stdin 或本地文件(而不是从变量)传递到远程curl
。
我不太确定为什么上面的方法不起作用。
答案1
7.55.0 版本中添加了@filename
for 样式中的参数( )。-H
man curl
-H
/--header <header/@file>
从 7.55.0 开始,此选项可以采用 style 参数
@filename
,然后为输入文件中的每一行添加标题。使用@-
将使curl从stdin读取头文件。
发生问题是因为使用了ssh
旧版本。curl
curl
所以基本上涉及了两个不同的版本。
$ 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"