Rust製のHTTPieのxhを使ってみた

Rust製のHTTPieのようなHTTPクライアントのxhを使ってみたので紹介します。

xhとは

xhはHTTPリクエストを送信するための高速で使いやすいコマンドラインHTTPクライアントです1。 パフォーマンスの向上に重点を置いており、HTTPieの優れた設計を可能な限り再実装しています1

インストール

xhは以下のような方法でインストールすることができます2。 完全な一覧についてはxhREADME.mdを参照して下さい2

ソースコードから

Cargoを利用してインストールすることができます。

1
cargo install xh

Linux

Alpine Linuxではapkを利用してインストールすることができます。

1
apk add xh

Arch Linuxではpacmanを利用してインストールすることができます。

1
pacman -S xh

DebianやUbuntuではAPTを利用してインストールすることができます。

1
apt install xh

macOS

macOSではHomebrewを利用してインストールすることができます。

1
brew install xh

使い方

GETリクエストを送信してみます。

1
xh httpbin.org/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

1
xh -h https://example.com

レスポンス

curlのコマンドへの変換機能

--curlオプションを使用することでxhのコマンドをそれと等価なcurlのコマンドに変換することができます。

1
xh --curl --ssl tls1.3 https://example.com

変換した結果は以下のようになります。

1
curl --tlsv1.3 --tls-max 1.3 https://example.com/

短所

xhはこの記事を書いた時点ではHTTPieの全ての機能を実装していません。 また、xhはプラグインには対応していません。

その他の違い

TLSバックエンド

xhはデフォルトのTLSバックエンドとしてrustlsを使用します。 rustlsはTLS 1.2以降のみをサポートしているので、デフォルトではxhでTLS 1.1などの古いプロトコルを使用することはできません。

1
xh --offline --ssl=tls1.1 :

以下のような警告が表示されます。

1
xh: warning: rustls does not support older TLS versions. native-tls will be enabled. Use --native-tls to silence this warning.

TLS 1.1などの古いプロトコルを使用する場合は、コンパイル時にnative-tls機能を有効にしてビルドした上で、実行時に--native-tlsオプションを指定することで、OpenSSLなどのシステムのTLSライブラリをTLSバックエンドとして使用することができます。 この場合に使用できるプロトコルは、そのTLSライブラリに依存します。

1
xh --offline --ssl=tls1.1 --native-tls :

出力

フォーマットされた出力は常にUTF-8です。

終わりに

Rust製のHTTPieのようなHTTPクライアントのxhを紹介しました。 起動速度が向上していることや、HTTP/2をサポートしているなどHTTPieにはない長所がかなりあると思いました。 また、古いバージョンのTLSをデフォルトではサポートしていない点も個人的には評価できます。 モダンなプロトコルをサポートした手軽に利用できるHTTPクライアントとして使ってみてはどうでしょうか。

この記事はCC BY 4.0の下でライセンスされています
最終更新 2024年9月13日 20:19 +0900
Hugo で構築されています。
テーマ StackJimmy によって設計されています。