Macでいい感じのcurlを使いたい

1 min read読了の目安(約1100字
brew install curl

以下解説。ちなみに2021/02/11現在ではcurl-opensslはcurlの別名になっているので、curl-opensslを使う意味はありません。以下の記事も編集しています。
参考:https://github.com/Homebrew/homebrew-core/pull/58274

Macにプリインストールされているcurl

Macにはデフォルトでcurlがインストールされています。バージョンも比較的新しいものがインストールされていますし、基本的にはプリインストールされているcurlで困ることはないと思います。

しかし例えばTLSv1.3を使いたいと思った場合、TLSv1.3に対応しているOpenSSLを使ってコンパイルされたcurlである必要があります。MacにプリインストールされているcurlではLibreSSLが使われていますが、LibreSSLのTLSv1.3のクライアント側の対応が入ったのは割と最近で、2020/09/27現在のプリインストールされているcurlではTLSv1.3を利用できません。

またcurlのHTTP/2対応はnghttp2を使用しているので、nghttp2と一緒にコンパイルする必要があります。プリインストールされているcurlは考慮されているのでHTTP/2を使用することができますが、標準では対応していないことに注意が必要です。

TLSに関する注意

注意なのですが、昔のcurlと現在のcurlでは一部非互換な変更があったので注意してください。以前は--tlsv1.1とオプションを渡せばUse TLSv1.1という挙動でしたが、新しめのバージョンだとUse TLSv1.1 or greaterという挙動に変わりました。使う前に必ず--helpを見てどの挙動のバージョンか確認してください。個人的にはこの変更はかなりひどい変更だと思います。本来この挙動にするならオプション名は--tls-min 1.1というオプションにすべきでしょう。しかしそんなオプションはありません。

ではTLSv1.1で通信したい場合はどうすればいいのでしょうか? 全く同じではないですが、--tls-maxというオプションが現在では追加されています(--helpで確認してください)。--tls-max 1.1というオプションを渡せば最大でTLSv1.1までしか使わなくなります。

以上のことを理解していればcurlを使ってミドルウェアの挙動を色々確認することができると思います。