笔者使用的Ubuntu正常情况下是带有curl的,不过近期由于需要检测网站http2支持,要升级curl版本。本文详细讲解curl的一般安装过程。
以发表日前发布的最新版7.57.0示例。
# 安装编译工具
sudo apt-get install git g++ make binutils autoconf automake autotools-dev libtool pkg-config \ zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \ libjemalloc-dev cython python3-dev python-setuptools # 下载、编译、安装curl wget https://curl.haxx.se/download/curl-7.57.0.tar.bz2 tar -jxvf curl-7.57.0.tar.bz2 cd curl-7.57.0 ./configure make make install
至此,curl正常情况下应该安装完毕。可以输入
curl --version
查看详情。如果输出显示如下例所示即为成功:
curl 7.57.0 (i686-pc-linux-gnu) libcurl/7.57.0 LibreSSL/2.5.4 zlib/1.2.8 libssh2/1.4.3 nghttp2/1.29.0 Release-Date: 2017-11-29 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy
不过笔者一开始显示的却是这样子:
curl 7.57.0 (i686-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3 Release-Date: 2017-11-29 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 NTLM NTLM_WB SSL libz TLS-SRP
有没有发现画风不对?问题就出在libcurl的版本上(也有同学是curl出的问题)。而且输入
curl --http2 -I https://nghttp2.org
检测会出现如下问题。
curl: (48) An unknown option was passed in to libcurl
根据搜索结果及自身实践,这是系统内置curl与用户安装curl共存导致的问题,可以按照下面办法解决:
(1)curl版本有误
检查/usr/bin和/usr/local/bin目录是否有多个版本的curl。
# 提示:可以使用下面的命令全盘检索文件。 locate -r <FileName> # <FileName>是你要检索的文件(夹)名称 # 如果报错,可以使用下面的命令更新检索数据库。 updatedb
locate -r /curl$
然后删除多余的curl(一般删除系统内置的版本,先根据文件日期等信息进行判断,一般情况下编译安装的版本为当前日期)。
如果删除后报错,用ln -s命令把新安装curl的位置链接过去。
(2)libcurl版本有误
检查/usr/lib和/usr/local/lib目录是否有多个版本的curl。
locate -r /curl$
笔者的系统内置libcurl为/usr/lib/i386-linux-gnu/libcurl.so.4。为了避免麻烦,故直接删除并把新文件链接过去。
rm /usr/lib/i386-linux-gnu/libcurlso.4 ln -s /usr/local/lib/libcurl.so.4 /usr/lib/i386-linux-gnu/libcurlso.4
完成后检查,问题解决。测试得到如下回复:
curl --http2 -I https://nghttp2.org HTTP/2 200 date: Wed, 17 Jan 2018 13:21:28 GMT content-type: text/html last-modified: Tue, 19 Dec 2017 14:35:15 GMT etag: "5a3923a3-19d8" accept-ranges: bytes content-length: 6616 x-backend-header-rtt: 0.001803 strict-transport-security: max-age=31536000 server: nghttpx via: 2 nghttpx x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block x-content-type-options: nosniff
提示:版本有误的问题,可能需要根据系统实际情况进行操作,不建议直接照搬本文讲述的过程。
对于安装curl后系统内置cmake报错的问题,请卸载内置cmake,并编译安装新版本即可(不要通过apt-get安装)。
Ubuntu版本:14.04 x86