如何将标头从标准输入或本地文件传递到远程curl?

如何将标头从标准输入或本地文件传递到远程curl?

以下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 版本中添加了@filenamefor 样式中的参数( )。-Hman 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"

相关内容