主页 > 原创 | 学习笔记 > 编译支持http2的curl

编译支持http2的curl

ubuntu 14.04 在运行

curl https://www.xdty.org -v --http2.0

时提示

curl: (1) Unsupported protocol。

使用

curl --version

命令得到

curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.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 GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

可见不支持 http2。需要重新编译支持 http2 的 libcurl。

1. 安装依赖

apt-get install make binutils autoconf automake autotools-dev libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libssh2-1-dev libxml2-dev libev-dev libevent-dev libjansson-dev libjemalloc-dev cython python3.4-dev python-setuptools

2. 编译安装 spdylay

git clone https://github.com/tatsuhiro-t/spdylay.git
cd spdylay/
autoreconf -i
automake
autoconf
./configure
make
make install
cd ..

3. 编译安装 nghttp2

git clone https://github.com/tatsuhiro-t/nghttp2.git
cd nghttp2
autoreconf -i
automake
autoconf
./configure
make
make install

4. 编译安装 curl 和 libcurl

wget http://curl.haxx.se/download/curl-7.45.0.tar.gz
tar xvf curl-7.45.0.tar.gz
cd curl-7.45.0
./configure --with-nghtt2=/usr/local/nghttp2
make
make install

需要增加/usr/local/lib到环境变量中

新建一个 /etc/ld.so.conf.d/local.conf 文件, 添加内容 /usr/local/lib

运行 ldconfig 载入

使用 curl –version 命令查看版本

curl 7.45.0 (x86_64-pc-linux-gnu) libcurl/7.45.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 libssh2/1.4.3 nghttp2/1.0.5-DEV librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets

显示已支持 HTTP2

使用 curl https://www.xdty.org -v –http2 测试 http2

Tags: curl http2 libcurl nghttp2 spdylay ubuntu

评论:3

  1. John Jiang 回复
    2015 年 10 月 27 日 于 下午 3:11

    curl为什么默认使用openssl 1.0.1f?有办法指定另一个openssl吗?我试过了很多种方法,都没有成功。我使用语句curl -v -k –http2 https://www.xdty.org,没有显示该站点支持HTTP/2。但使用curl -v -k –http2 http://www.xdty.org,即不使用SSL,即会显示该站点支持HTTP/2。查过相关问题之后,认为curl应该要使用openssl 1.0.2。因为openssl从1.0.2开始才支持ALPN。

    • tianyu 回复
      2015 年 11 月 5 日 于 下午 9:37

      显示的应该是系统当前安装的 openssl 版本,安装个新的应该就可以了

    • tianyu 回复
      2015 年 11 月 5 日 于 下午 9:43

      另外运行 curl -v –http2 https://www.xdty.org 的时候我有收到 http2的响应

      GET / HTTP/1.1
      > Host: http://www.xdty.org
      > User-Agent: curl/7.45.0
      > Accept: */*
      >
      * http2_recv: 16384 bytes buffer at 0xbb5d18 (stream 1)
      * http2_recv: 16384 bytes buffer at 0xbb5d18 (stream 1)
      * http2_recv: 16384 bytes buffer at 0xbb5d18 (stream 1)
      * http2_recv: 16384 bytes buffer at 0xbb5d18 (stream 1)
      * http2_recv: returns 4034 for stream 1
      < HTTP/2.0 200 < server:nginx/1.9.5 < date:Thu, 05 Nov 2015 13:41:16 GMT < content-type:text/html; charset=UTF-8 < last-modified:Thu, 05 Nov 2015 13:41:16 GMT < x-powered-by:W3 Total Cache/0.9.4.1

发表评论

邮箱地址不会被公开。 必填项已用*标注