How to Use cURL HTTP/2 on macOS
cURL is one of most powerful tools for testing HTTP traffic. We typically use cURL to interact with HTTP APIs or test websites.
Although cURL supports HTTP/2, the version that’s installed on macOS Sierra does not. Read Update.
If you try to use the --http2 flag, you’ll receive the following error:
$ curl -I --http2 https://www.itnota.com |
curl: (1) Unsupported protocol |
Fortunately, we can use another installation from Homebrew alongside the default version. To do so, just type the following command in the Terminal window (assuming you already have Homebrew installed):
$ brew install curl —with-nghttp2 |
That’s it.
Keep in mind that this installation does not replace the default curl in the system and this can be a good or bad thing for you.
If you want to keep things separately, you’re done as you can always call the 2nd curl by typing its full path:
$ /usr/local/opt/curl/bin/curl -I --http2 https://www.itnota.com |
If you check the version of the two in this example:
# Default Version |
$ curl --version |
curl 7.51.0 (x86_64-apple-darwin16.0) libcurl/7.51.0 SecureTransport zlib/1.2.8 |
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp |
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets |
# Homebrew Version |
$ /usr/local/opt/curl/bin/curl --version |
curl 7.54.0 (x86_64-apple-darwin16.6.0) libcurl/7.54.0 OpenSSL/1.0.2l zlib/1.2.8 nghttp2/1.23.1 |
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp |
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy |
If you want to set the curl you installed from Homebrew as the default, keep reading.
Set Homebrew cURL as the Default
There are several ways to set the new version as your default curl, but I believe the best and safest way to do it was already suggested at the end of installation process.
Notice that after installing the curl from Homebrew you’ll see a warning and instruction. If you missed it, it will look similar to this:

[...] |
######################################################################## 100.0% |
==> ./configure --disable-silent-rules --prefix=/usr/local/Cellar/curl/7.54.0 --with-==> make install==> |
Caveats |
This formula is keg-only, which means it was not symlinked into /usr/local, |
because macOS already provides this software and installing another version in |
parallel can cause all kinds of trouble. |
If you need to have this software first in your PATH run: |
echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.bash_profile |
For compilers to find this software you may need to set: |
LDFLAGS: -L/usr/local/opt/curl/lib |
CPPFLAGS: -I/usr/local/opt/curl/include |
For pkg-config to find this software you may need to set: |
PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig |
[...] |
Just following the instruction provided, type in the following:
$ echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.bash_profile |
You need to restart terminal and this time if you call curl without the full path, it will run the Homebrew version.
If you need to refer back to the default macOS version, just edit your ~/.bash_profile file by typing the following command:
$ sudo nano ~/.bash_profile |
Look for this line:
export PATH="/usr/local/opt/curl/bin:$PATH" |
and comment it out like so:
# export PATH="/usr/local/opt/curl/bin:$PATH" |
And press CTRL-X and Yes to exit and save it.
Now you can test it using —http2 flag:
$ curl -I --http2 https://www.itnota.com |
Update
Update on 5/21/2019: There are two updates that render this post obsolete.
First update is that the version of curl installed on macOS now supports HTTP/2.
The second update is that Homebrew has removed the –with-nghttp2 option from curl which makes the instructions not accurate.
You can still follow the instructions above for Homebrew version of curl only if you substitute it with the curl-openssl and its corresponding path instead.
So you can uninstall Homebrew curl by running the following:
$ brew uninstall curl |
Then install curl-openssl by running the following:
$ brew install curl-openssl |
That’s it. You don’t even need to specify any flag such as --with-nghttp2 on the curl-openssl install. It will just work. You just need to pay attention to the path where the curl is installed. It is
/usr/local/opt/curl-openssl/bin/curl |
The latest comparison between the two versions of curl:
# Default Version |
$ curl --version |
curl 7.54.0 (x86_64-apple-darwin18.0) libcurl/7.54.0 LibreSSL/2.6.5 zlib/1.2.11 nghttp2/1.24.1 |
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp |
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy |
# Homebrew Version |
$ /usr/local/opt/curl-openssl/bin/curl --version |
curl 7.65.0 (x86_64-apple-darwin18.6.0) libcurl/7.65.0 OpenSSL/1.0.2r zlib/1.2.11 brotli/1.0.7 c-ares/1.15.0 libssh2/1.8.2 nghttp2/1.38.0 librtmp/2.3 |
Release-Date: 2019-05-22 |
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: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets |
Further Reading
brew install curl –with-nghttp2 errors saying “invalid option: –with-nghttp2”
How to Use cURL HTTP/2 on macOS的更多相关文章
- 安装kubuctl
安装和设置kubectl 使用Kubernetes命令行工具kubectl在Kubernetes上部署和管理应用程序.使用kubectl,可以检查集群资源; 创建,删除和更新组件. 以下是安装kube ...
- Fuchsia OS入门官方文档
Fuchsia Pink + Purple == Fuchsia (a new Operating System) Welcome to Fuchsia! This document has ever ...
- Swift 3 and OpenGL on Linux and macOS with GLFW
https://solarianprogrammer.com/2016/11/19/swift-opengl-linux-macos-glfw/ Swift 3 and OpenGL on Linux ...
- 在macOS Sierra 10.12搭建PHP开发环境
macOS Sierra 11.12 已经帮我们预装了 Ruby.PHP(5.6).Perl.Python 等常用的脚本语言,以及 Apache HTTP 服务器.由于 nginx 既能作为 HTTP ...
- How to convert webp to png/jpg/gif in MacOS
Environment I'm using OS X 10.11.4 and have homebrew 1.0.5 installed. Introduction I recently downlo ...
- MacOS X Terminal中设置代理
MacOS X中,即使在网络设置中配置了代理连接,Terminal中也不能访问不可描述的东西,需要额外设置. 我用的是Shadowsocks,使用privoxy搭建了本地的代理服务器,地址是http: ...
- macOS 安装 wget
适用于macOS Sierra Apple Store下载安装Xcode 安装Homebrew包管理,类似于Ubuntu下的apt-get: 终端下输入 ruby -e "$(curl -f ...
- 在MacOS和iOS系统中使用OpenCV
在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV ...
- luarocks在macOS系统上的安装
luarocks是基于lua开发的一个包管理工具,所以在安装luarocks之前需要先安装lua(见博客同目录下“lua在MacOS系统上的安装”).具体的安装步骤如下: 1.源码安装部署luaroc ...
- [转]在MacOS和iOS系统中使用OpenCV
OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很 ...
随机推荐
- 树形结构数据 数组对象 按照 sort 字段排序
export function sortTreeData (data, flag) { let arr = [] if (flag === 1) { arr = data[0].children } ...
- C#获取环境变量的值
Environment.GetEnvironmentVariable("Path"); 修改环境变量之后,不能立即生效,需要重启一下VStudio 或重启电脑 : 在 vstudi ...
- WPF中为Popup和ToolTip使用WindowMaterial特效 win10/win11
先看效果图: 大致思路是:通过反射获取Popup内部的原生窗口句柄,然后通过前文已经实现的WindowMaterial类来应用窗口特效:对于ToolTip,为了保持其易用性,我使用了附加属性+全局样式 ...
- Python入门:A+B问题
1. A + B 问题I 前言 本篇作为课程第一篇,主要是对Python基础语法进行扫盲,本节课会学习到下面知识: 输入 本道题目的工作任务很简单,只是计算两个数的和,但是在计算之前,我们首先要明确的 ...
- 一文读懂 KubeSphere 企业版 4.0:多品类生态价值赋能的里程碑
近日,青云科技 KubeSphere 团队革新先行,重磅发布了沉淀数年.倾力打造的全新分布式云原生可扩展开放架构--KubeSphere LuBan,以及在此之上构建的化整为零.全能开放.随时随地自由 ...
- NebulaGraph 的云产品交付实践
作者:乔雷,Vesoft.Inc 云原生技术专家 NebulaGraph 介绍 NebulaGraph 是由杭州悦数科技有限公司自主研发的一款开源分布式图数据库产品,擅长处理千亿节点万亿条边的超大数据 ...
- PG 的 MergeJoin 就是鸡肋
好久没写博客,平时工作非常忙,而且现在对接的应用基本都是微服务架构. 微服务这种架构平时也很难遇到复杂SQL,架构层面也限制了不允许有复杂SQL,平时处理的都是简单一批的点查SQL. 基本上优化的内容 ...
- docker实战: vue+java+uniapp部署到阿里云服务器详解(此文没有使用宝塔面板部署),附带各种坑处理
一.部署前准备工具以及注意事项: 项目来源:https://gitee.com/ZhongBangKeJi/crmeb_java?_from=gitee_search 官方部署文档:https://d ...
- POI方式实现Excel表格数据导出
Excel表格导出 1.添加pom依赖 1 <!-- office 操作工具 --> 2 <dependency> 3 <groupId>org.apache.po ...
- ESP8266 + MQTT + 土壤湿度传感器
ESP8266 + MQTT + 土壤湿度传感器 连线 #include <Arduino.h> #include <Ticker.h> #include <ESP826 ...