Ruby(net::http、http gem)の HTTP/HTTPS 通信をキャプチャ

Ruby(net::http、http gem)の HTTP/HTTPS 通信をキャプチャ のカバー画像

このブログでは、Ruby スクリプト(net/http と http)ライブラリから HTTP/HTTPS 通信をキャプチャする方法を紹介します。

このブログで扱う内容

  • Proxyman を使い、Ruby スクリプト(net/http または http gem)から HTTP/HTTPS 通信をキャプチャする方法

1. Ruby で HTTPS リクエストを送信する

Ruby 開発者であれば、次のライブラリを使って HTTP(S) リクエストを送信することに多くの時間を費やしているかもしれません。

  • Net::HTTP:Ruby に標準で組み込まれているライブラリです。HTTP のリクエスト/レスポンスプロトコルを使うクライアントを実装するための、豊富な API を提供します。
  • http:サードパーティ製の gem です。Net::HTTP よりも使いやすいクライアントライブラリとして設計されています。

次のサンプルコードは、両方のライブラリでリクエストを送信する方法を示しています。

require "http"
require 'net/http'

# Use net/http
uri = URI('https://httpbin.org/post?lib=net_http')
res = Net::HTTP.post_form(uri, 'isSSL' => 'true')
puts(res)

# Use http gem
res = HTTP.get("https://httpbin.org/get?lib=http").to_s
puts(res)

実行するには、サンプルを client.rb として保存し、ターミナルアプリを開いて、ruby client.rb を実行するだけです。

Proxyman: Ruby の net/http または http gem で HTTP リクエストを送信
Proxyman: Ruby の net/http または http gem で HTTP リクエストを送信

2. HTTP/HTTPS をキャプチャする方法

現状の問題

デフォルトでは、両方のライブラリ(net/http と http gem)は、システムの HTTP プロキシ設定や HTTP_PROXY、HTTPS_PROXY 環境変数を使用しません。Fiddler や Charles Proxy を使っている場合、その通信は表示されないことがあります。

これを解決するには、プロキシ設定を手動で追加する必要があります。net/http の設定例は次のとおりです。

proxy_addr = 'localhost'
proxy_port = 9090

Net::HTTP.new('example.com', nil, proxy_addr, proxy_port).start { |http|
  # always proxy via localhost:9090
}

詳しくは net::http Proxy をご覧ください。

ソースコードを手動で変更する必要があるため、ミスが起きやすく、時間もかかります。

解決策 ✅

幸いなことに、Proxyman には、設定なしで HTTP/HTTPS のリクエスト/レスポンスをキャプチャできる機能があります。

  1. 最新の macOS 版アプリを https://proxyman.com/ からダウンロードします
  2. Mac に Proxyman の証明書をインストールします。Certificate メニュー -> Install Certificate on this Mac… を開き、「Install & Trust」ボタンをクリックすればインストールできます。
現在の MacBook に Proxyman ルート証明書をインストール
現在の MacBook に Proxyman ルート証明書をインストール
  1. Setup メニュー -> Automatic を開き、「New Terminal app…」をクリックします
設定不要で Ruby の HTTP 通信をキャプチャできる、事前設定済みのターミナルアプリを開く
設定不要で Ruby の HTTP 通信をキャプチャできる、事前設定済みのターミナルアプリを開く
  1. 新しいターミナルアプリが表示されます。これは事前設定済みの Apple の Terminal アプリで、Ruby からの HTTPS 通信を自動的にキャプチャして復号します。
  2. 新しいターミナルアプリで、もう一度 ruby client.rb を実行します。すると、すべての HTTP/HTTPS 通信が Proxyman によってキャプチャされ、復号されます 🎉
Ruby スクリプトを実行し、Proxyman で net/http や http gem の HTTP 通信を確認
Ruby スクリプトを実行し、Proxyman で net/http や http gem の HTTP 通信を確認
  1. 完了です。

  • 仕組みの詳細を知りたい場合は、こちらの Automatic Setup のドキュメント をご覧ください
  • 普段お使いのターミナル(iTerm2 や Hyper など)を使いたい場合は、Manual Setup をご覧ください。

対応している Ruby ライブラリ

Proxyman は、http、net/http、net/https、faraday、httparty、fastlane に標準で対応しています。

まとめ

Ruby スクリプト(net/http や http gem)から HTTP/HTTPS 通信をキャプチャするのは、ミスが起きやすく時間もかかります。しかし、Proxyman の Automatic Setup を使えば、設定なしかつワンクリックで実現できます。

この設定は、Proxyman が開いた新しいターミナルセッションにのみ適用されます。そのため、Ruby のコマンドはそのウィンドウで実行してください。普段お使いのシェル設定ファイルは変更されません。それでも特定のライブラリの通信が表示されない場合は、そのライブラリのプロキシ設定を出力し、環境変数によるプロキシを無効にしていないか確認してください。また、同じターミナルから https://httpbin.org/get へ簡単なリクエストを送れるかも確認してください。


Proxyman は、iOS デバイス、iOS シミュレータ、Android デバイス上のアプリやドメインの HTTP(S) 通信をキャプチャして検査できる、高性能な macOS アプリです。

入手はこちら:https://proxyman.com/

Noah Tran
Noah Tran

2026年7月18日 に改訂。 ターミナルの適用範囲を明確にし、表示されないスクリプトを確認する手順を追加しました。

コードを変更せずに Ruby のリクエストを検査

Proxyman から設定済みのターミナルを開き、そこで Ruby スクリプトを実行して、リクエストとレスポンスの全体を確認します。

Proxyman をダウンロード