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クライアントとして使ってみてはどうでしょうか。