Rust製のHTTPieのようなHTTPクライアントのxhを使ってみたので紹介します。
xhとは
xhはHTTPリクエストを送信するための高速で使いやすいコマンドラインHTTPクライアントです1。
パフォーマンスの向上に重点を置いており、HTTPieの優れた設計を可能な限り再実装しています1。
インストール
xhは以下のような方法でインストールすることができます2。
完全な一覧についてはxhのREADME.mdを参照して下さい2。
ソースコードから
Cargoを利用してインストールすることができます。
| |
Linux
Alpine Linuxではapkを利用してインストールすることができます。
| |
Arch Linuxではpacmanを利用してインストールすることができます。
| |
DebianやUbuntuではAPTを利用してインストールすることができます。
| |
macOS
macOSではHomebrewを利用してインストールすることができます。
| |
使い方
GETリクエストを送信してみます。
| |
結果はHTTPieと同様に色付けされており、JSONがシンタックスハイライトされる点も同様です。

その他の使い方についてはHTTPieのドキュメントを参照して下さい。
HTTPieとの比較
xhはHTTPieを可能な限り再実装していますが、以下のようなHTTPieにはない特徴が存在したり、逆にxhにはない特徴が存在したりするので、紹介します3。
長所
Rust製
スクリプト言語であるPythonで実装されているHTTPieとは異なり、xhはRustで実装されているので起動速度が向上しています。
また、Rustで実装されているのでシングルバイナリにすることも可能で、インストールや配布を簡単に行うこともできます。
HTTP/2をサポート
xhはHTTP/2をサポートしています。
HTTPieはこの記事を書いた時点ではHTTP/2をサポートしていません45。
| |

curlのコマンドへの変換機能
--curlオプションを使用することでxhのコマンドをそれと等価なcurlのコマンドに変換することができます。
| |
変換した結果は以下のようになります。
| |
短所
xhはこの記事を書いた時点ではHTTPieの全ての機能を実装していません。
また、xhはプラグインには対応していません。
その他の違い
TLSバックエンド
xhはデフォルトのTLSバックエンドとしてrustlsを使用します。
rustlsはTLS 1.2以降のみをサポートしているので、デフォルトではxhでTLS 1.1などの古いプロトコルを使用することはできません。
| |
以下のような警告が表示されます。
| |
TLS 1.1などの古いプロトコルを使用する場合は、コンパイル時にnative-tls機能を有効にしてビルドした上で、実行時に--native-tlsオプションを指定することで、OpenSSLなどのシステムのTLSライブラリをTLSバックエンドとして使用することができます。
この場合に使用できるプロトコルは、そのTLSライブラリに依存します。
| |
出力
フォーマットされた出力は常にUTF-8です。
終わりに
Rust製のHTTPieのようなHTTPクライアントのxhを紹介しました。 起動速度が向上していることや、HTTP/2をサポートしているなどHTTPieにはない長所がかなりあると思いました。 また、古いバージョンのTLSをデフォルトではサポートしていない点も個人的には評価できます。 モダンなプロトコルをサポートした手軽に利用できるHTTPクライアントとして使ってみてはどうでしょうか。