使用一行代码测试http/2支持的Curl命令

43

我正在编写一个单元测试,以检查是否支持http/2

是否有一个一行代码的curl命令可以检查是否支持http/2并输出易于解析的响应?

6个回答

90

支持HTTP/2:

$ curl -sI https://curl.se -o/dev/null -w '%{http_version}\n'
2

不支持HTTP/2(在这种情况下使用1.1):

$ curl -sI http://curl.se -o/dev/null -w '%{http_version}\n'
1.1

要使此命令行生效,需要 curl 7.50.0 或更新版本。

HTTP/3

自从curl 7.88.1版本开始,如果您构建curl以支持HTTP/3,则可以通过以下方法扩展上述单行命令以检查HTTP/3支持:

$ curl -sI --http3 https://curl.se -o/dev/null -w '%{http_version}\n'
3

1
它给了我以下错误:curl: 未知 --write-out 变量:'http_version' - Hammad Dar
3
如果您正在测试具有自签名证书的服务器,请使用“-k”(curl -ksI ...)运行。 - David

11

运行

curl --version

在功能列表中寻找HTTP2


5
这是一行命令:curl --version | grep -i http2。它的作用是查询curl的版本信息并检索其中是否包含HTTP/2相关内容。 - Stalinko
3
问题是关于特定网站的http2支持,而不是curl本身! - hammady
这个要求是为了检查网站是否支持HTTP/2,而不是检查curl是否支持HTTP/2。 - undefined

5

在这里,你可以找到一个调试、测试和使用HTTP/2的工具列表

从命令行中最简单的可能是:

$ is-http2 www.cloudflare.com

但这需要运行npm install -g is-http2-cli命令。
如果要使用curl进行测试,您可能需要使用nghttp库编译它,在macOS上可以使用brew,您可以使用以下命令:
$ brew install curl --with-nghttp2

然后您可以使用@daniel-stenberg在他的答案中建议的方法。
$ curl -sI https://curl.haxx.se -o/dev/null -w '%{http_version}\n'

如果支持http2,你将获得2。


1
谢谢你的回答。你的回答还包括了使用其他工具的选项,这非常有用。不过,由于Daniel Stenberg的回答更符合原问题,我打算接受他的回答。 - bn4t
1
你知道吗,@nbari,使用HTTP2和curl输出是不同的:curl -sI https://curl.haxx.se HTTP/2 200 server: Apache ... is-http2 https://curl.haxx.se:443 × https://curl.haxx.se:443不支持HTTP/2 - Ľubomír Mlích

4

我使用了

curl -kvso /dev/null --http2 https://app.domain.com:443

返回的结果

...
> GET / HTTP/2
...
< HTTP/2 302
...

这不是在检查是否支持HTTP2,而是检查HTTP2是否真正可用。


4
-kvso /dev/null 是更详细的选项列表 --insecure --verbose --silent --output /dev/null 的缩写形式。建议参考 https://curl.haxx.se/docs/manpage.html 并在其中使用 Ctrl+F 查找这些选项以查看详情。 - Ľubomír Mlích

1
你可以简单地这样做:
curl --http2 --head domain.com

1
欢迎来到Stack Overflow!请阅读[答案]并[编辑]您的问题,以包含有关此代码实际解决问题的说明。请记住,您不仅要解决问题,还要教育OP和任何未来的读者。 - Adriaan

0

被接受的答案在我所看的示例中对于h2c无效。请改用以下命令:

curl --http2 -sI https://curl.se -o/dev/null -w '%{http_version}\n'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接