Rust製のHTTPieのxhを使ってみた
Rust製のHTTPieのようなHTTPクライアントのxhを使ってみたので紹介します。
xhとは
xh
はHTTPリクエストを送信するための高速で使いやすいコマンドラインHTTPクライアントです[1]。
パフォーマンスの向上に重点を置いており、HTTPieの優れた設計を可能な限り再実装しています[1:1]。
インストール
xh
は以下のような方法でインストールすることができます[2]。
ソースコードから
Cargoを利用してインストールすることができます。
cargo install xh
Linux
Alpine Linuxではapkを利用してインストールすることができます。
apk add xh
Arch Linuxではpacmanを利用してインストールすることができます。
pacman -S xh
DebianやUbuntuではAPTを利用してインストールすることができます。
apt install xh
FreeBSD
FreeBSDではFreshPortsからインストールすることができます。
pkg install xh
macOS
macOSではHomebrewを利用してインストールすることができます。
brew install xh
Windows
WindowsではWinGetを利用してインストールすることができます。
winget add ducaale.xh
その他
インストールスクリプトが提供されているので、これを利用してインストールすることもできます。
Linux & macOS:
curl -sfL https://raw.githubusercontent.com/ducaale/xh/master/install.sh | sh
Windows:
iwr -useb https://raw.githubusercontent.com/ducaale/xh/master/install.ps1 | iex
また、release pageでLinux、macOS、Windows向けのビルド済みバイナリが配布されているので、これを利用することもできます。
使い方
GET
リクエストを送信してみます。
xh httpbin.org/get
結果はHTTPieと同様に色付けされており、JSONがシンタックスハイライトされる点も同様です。
その他の使い方については下記のドキュメントを参照して下さい。
HTTPieとの比較
xh
はHTTPieを可能な限り再実装していますが、以下のようなHTTPieにはない特徴が存在したり、逆にxhにはない特徴が存在したりするので、紹介します[3]。
長所
Rust製
スクリプト言語であるPythonで実装されているHTTPieとは異なり、xh
はRustで実装されているので起動速度が向上しています。
また、Rustで実装されているのでシングルバイナリにすることも可能で、インストールや配布を簡単に行うこともできます。
HTTP/2をサポート
xh
はHTTP/2をサポートしています。
HTTPieはこの記事を書いた時点ではHTTP/2をサポートしていません。
xh -h https://example.com
curlのコマンドへの変換機能
--curl
オプションを使用することでxh
のコマンドをそれと等価なcurl
のコマンドに変換することができます。
xh --curl --ssl tls1.3 https://example.com
変換した結果は以下のようになります。
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などの古いプロトコルを使用することはできません。
xh --offline --ssl=tls1.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ライブラリに依存します。
xh --offline --ssl=tls1.1 --native-tls :
出力
フォーマットされた出力は常にUTF-8です。
終わりに
Rust製のHTTPieのようなHTTPクライアントのxhを紹介しました。
起動速度が向上していることや、HTTP/2をサポートしているなどHTTPieにはない長所がかなりあると思いました。
また、古いバージョンのTLSをデフォルトではサポートしていない点も個人的には評価できます。
モダンなプロトコルをサポートした手軽に利用できるHTTPクライアントとして使ってみてはどうでしょうか。
Discussion