带有CURL的HTTP2给出了"不支持的协议"

时间:2015-06-25 03:37:39

标签: curl http2

已经按照here中的步骤操作,使用curl Unsupported Protocol选项时仍然--http2。同样,将CURLOPT_HTTP_VERSION设置为CURL_HTTP_VERSION_2_0会导致程序使用HTTP / 1.1进行通信,而不是HTTP / 2.

平台:VMware Player 7上的Ubuntu 15.04。

我已经使用--prefix=/usr/local安装了nghttp2-1.0.4,因此libnghttp2。*位于/usr/local/lib

这是配置curl-7.43.0的代码:

./configure --with-nghttp2=/usr/local

结果显示HTTP2已启用:

    HTTP2 support:    enabled (nghttp2)

makesudo make install之后,以下内容会返回Unsupported Protocol

curl --http2 https://http2.akamai.com

curl版本不支持显示nghttp2:

curl 7.43.0 (i686-pc-linux-gnu) libcurl/7.38.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API SPNEGO NTLM NTLM_WB SSL libz TLS-SRP

然后我按照here的建议,我需要有OpenSSL 1.0.2或更高版本。在/ opt / openssl中安装后,我重新配置了:

./configure --with-nghttp2=/usr/local --with-ssl=/opt/openssl/lib

makesudo make install之后,所有问题都保持不变。奇怪的是,curl --version仍然返回与上面相同的信息,OpenSSL / 1.0.1f尚未升级。

非常感谢任何帮助我成功使用--http2选项的帮助。

3 个答案:

答案 0 :(得分:4)

显然,您没有使用正确版本的curl进行链接,至少在运行时是这样。这就是输出libcurl / 7.38.0的含义。我的版本号更高。尝试

LD_LIBRARY_PATH=/usr/local/lib curl <whatever> 

作为你的命令。或者只是为了确定:

ldd `which curl` 

并注意列出的依赖项。

答案 1 :(得分:0)

这真的可以帮助我正确设置

答案 2 :(得分:0)

我发现curl 7.53.1 for Windows这个工具对于测试http2请求非常有用。 它具有针对Windows的curl的预编译版本,这些Windows版本具有OpenSSL,ngttp2,zlib和IPv6支持。