HTTP2与CURL一起使用会出现“不支持的协议”错误。

20

我已经按照这里的步骤操作过,但仍然在使用curl --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

然后我按照这里的建议行事,需要安装 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个回答

6

显然你在运行时没有链接正确版本的curl。这就是输出libcurl/7.38.0的含义。我的版本号比那个更高。尝试使用以下命令:

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

依照您的指示。或者仅仅为了确保:
ldd `which curl` 

请注意列出的依赖项。


1
上面第二个命令显示我仍在使用默认库/lib/i386-linux-gnu。将库路径设置为上面的第一个代码解决了问题。Curl现在支持http2。谢谢! - Curioso
根据这里的建议,在./configure之前加上sudo命令。如果没有使用sudo,我的安装无法正常工作。 - Curioso
我仍然遇到问题。autoreconf -i automake autoconf sudo ./configure --prefix=/usr/local sudo make sudo make install LD_LIBRARY_PATH=/usr/local/lib curl --http2 http://google.com curl: (1) 不支持的协议 - Jeff Silverman
2
对于Mac OS X,它将是otool -L `which curl` - CodeGroover

3

这篇文章对我真的很有帮助,让我正确地进行了设置


非常感谢您的帮助,它让我今天在Debian 8上安装了支持http2的curl 7.46。 - Sudavar

1
我发现这个工具curl 7.53.1 for Windows非常有用,可以测试http2请求。它提供了预编译的curl构建版本,支持OpenSSL、ngttp2、zlib和IPv6。

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