Httpbinは、HTTP リクエストのテストやデバッグに使用できるシンプルな Web サービスです。本文では、Httpbinの基本情報を紹介した上、基本的な使い方を皆さんに紹介します。
Httpbinは、APIの開発やテストにおいて非常に便利なツールであり、Apidogと組み合わせることでさらに強力なテスト環境を構築できます。
Httpbinとは
Httpbin
は、Python + Flask
で書かれたHTTP Request & Responseサービス
であり、主にHTTPライブラリのテストに使用されます。リクエストを送信すると、指定されたルールに従ってリクエストが返されます(送信されたリクエストの情報を確認できます)。

Httpbin
はHTTP/HTTPSリクエストをサポートし、すべてのHTTPメソッドをサポートしています。HTTPリクエストとレスポンスのさまざまな情報、例えばcookie、IP、ヘッダー、ログイン認証などをテストできます。302リダイレクトや302リダイレクトの回数をシミュレートすることもできます。また、HTMLファイル、XMLファイル、または画像ファイル(返される画像のフォーマットを指定することもできます)を返すこともできます。
Httpbin
公式サイト:http://httpbin.org/
Httpbin
オープンソース:https://github.com/postmanlabs/httpbin
Httpbinの用途は?
それでは、Httpbin
サービスは何のために使われるのでしょうか?
一言で説明すると、送信したリクエストが実際にどのようなものかを確認するためです。リクエストのどの部分の情報を確認する必要があるかに応じて、適切なAPIエンドポイントを呼び出すだけです。
Httpbinのデプロイ:ローカルで実行する方法
Httpbin
はWebサイトを通じて簡単にアクセスすることもできますし、ローカルにデプロイすることもできます。
Httpbin
をローカル環境にデプロイすると、外部のサーバーと通信することなく、HTTP通信をデバッグしたりすることができるようになります。
pipツールでインストール
Httpbin
とguicorn
をそれぞれインストールする必要があります。guicorn
はwsgi http
サーバーであり、Httpbin
サービスを起動するために使用されます。
# cmdコマンドラインに入り、以下のコマンドを実行します:
# HttpbinとguicornをインストールHttpbinとguicornをインストール
pip install gunicorn
pip install httpbin
# 以下のコマンドを実行してサービスを起動します:
gunicorn httpbin:app
注意:この方法はWindowsシステムでは使用できません。エラーImportError: No module named 'fcntl'
が発生します。(ネット上で調べたところ、fcntlモジュールはWindows環境では認識されないためです)
Httpbinをローカルにインストール
# githubからHttpbinをローカルにクローンする
# cmdコマンドの現在のディレクトリ(例えばC:\Users\L>)にコマンドを実行すると、直接クローンされます。
git clone https://github.com/Runscope/httpbin.git
# httpbinコマンドをインストールする
pip install -e httpbin
# httpbinサービスを起動するコマンド
python -m httpbin.core [--port=PORT] [--host=HOST]
# 例:アクセス方法:http://127.0.0.1:9999/get
python -m httpbin.core --port=9999
実際に試したところ、Windowsシステムでは、この方法でローカルにHttpbin
サービスを正常に起動できました。
Dockerでローカルデプロイ
HTTPBINをDockerを使用してローカルで実行する方法を以下に示します。
前提条件:
- Dockerがインストールされていること
手順:
ステップ⒈ターミナルまたはコマンドプロンプトを開きます。
ステップ⒉以下のコマンドを実行して、HTTPBINのDockerイメージを取得します。
docker pull kennethreitz/httpbin
ステップ⒊イメージの取得が完了したら、以下のコマンドを実行してHTTPBINのDockerコンテナを起動します。
docker run -p 80:80 kennethreitz/httpbin
このコマンドは、ホストマシンのポート80をコンテナのポート80にマッピングします。
ステップ⒋コンテナが正常に起動すると、以下のようなメッセージが表示されます。
[2023-04-19 12:34:56 +0000] [1] [INFO] Starting gunicorn 19.9.0
[2023-04-19 12:34:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
[2023-04-19 12:34:56 +0000] [1] [INFO] Using worker: sync
[2023-04-19 12:34:56 +0000] [8] [INFO] Booting worker with pid: 8
ステップ⒌ブラウザを開き、http://localhost/
にアクセスします。HTTPBINのトップページが表示されます。
ステップ⒍各種エンドポイントにHTTPリクエストを送信してテストを行うことができます。例えば、http://localhost/get
にアクセスすると、GETリクエストのレスポンスが表示されます。
ステップ⒎コンテナを停止するには、ターミナルまたはコマンドプロンプトでCtrl+Cを押します。
ステップ⒏コンテナを完全に削除するには、以下のコマンドを実行します。
docker rm $(docker ps -a -q --filter ancestor=kennethreitz/httpbin)
これで、HTTPBINをDockerを使用してローカル環境で実行し、テストを行うことができます。Dockerを使用することで、環境のセットアップが簡単になり、異なるマシン間での一貫性が保たれます。
注意: HTTPBINのDockerイメージは、デフォルトでポート80を使用します。他のアプリケーションがすでにこのポートを使用している場合は、-p
オプションで別のポート番号を指定する必要があります。
Httpbinにアクセスして利用する方法
Httpbin
の使用方法は非常にシンプルです。リクエストのアドレスをhttpbin.org
に変更するだけです。
例えば、GETリクエスト:http://httpbin.org/get
ローカルにデプロイされたHttpbin
サービスを使用する場合は、http://127.0.0.1:[自分で設定したポート番号]にアクセスします。
Httpbinで利用可能なAPIエンドポイント
Httpbinの公式サイトまたはローカルのHttpbin`サービスhttp://127.0.0.1:9999/にアクセスすると、以下のような画面が表示されます。

ページ内の各オプションをクリックすると、対応するインターフェースの説明が表示されます。
よく使われるAPIエンドポイント
エンドポイント | 説明 |
---|---|
/ip | リクエスト元のIPアドレスを返します。 |
/user-agent | 送信されたリクエストのUser-Agentパラメータを返します。 |
/headers | 送信されたリクエストのヘッダーパラメータを返します。 |
/get | GETリクエストの送信パラメータ。 |
/post | POSTリクエストの送信パラメータ。 |
/patch | PATCHリクエストの送信パラメータ。 |
/put | PUTリクエストの送信パラメータ。 |
/delete | DELETEリクエストの送信パラメータ。 |
APIレスポンスの例
(1)ヘッダー情報を返す:
# APIエンドポイント:https://httpbin.org/headers
{
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh;q=0.6",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5ff1a4f7-69a84fca0693b09e28d214b0"
}
}
(2)自分のIPアドレスを返す:
# APIエンドポイント:https://httpbin.org/ip
{
"origin": "106.35.9.12"
}
(3)GETリクエストの詳細情報を返す:
# APIエンドポイント:https://httpbin.org/get?department=1
{
"args": {
"department": "1"
},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh;q=0.6",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4209.400",
"X-Amzn-Trace-Id": "Root=1-5ff1a59b-4e514a40023721d276ae07eb"
},
"origin": "106.35.9.12",
"url": "https://httpbin.org/get?department=1"
}
説明:Httpbin
サービスでPOSTがどのように使用されるかを確認する必要がある場合は、requestsライブラリのPOSTリクエストの学習記事をご覧ください。
Apidogでより便利にAPIをテストする
APIの動作を理解したり、正確な動作を確保したりするには、APIテストツールのApidogを使用するのがおすすめです。直感的なUIでただの1クリックだけで、APIの単体テストを行う事ができます。
ステップ⒈Apidogを開き、「新しいAPI」をクリックして、単体テストを行うAPIを新規に作成します。
ステップ⒉APIが使用するHTTPメソッドを選択した上、エンドポイントのURLを入力します。
ステップ⒊APIの仕様書に記載されているように、必要なパラメータなどの情報を記入して送信ボタンをクリックして、APIのリクエストを送信して、レスポンスを取得します。

以上の手順を参照して、APIの単体テストを簡単に行う事ができます。また、Apidogにレスポンスの「自動検証」という機能も備えています。
この機能は、返されたレスポンスが事前に定義したステータスコードとデータ構造に一致しているかどうかをを自動的に判定することもできるので、テスト面から言うと、非常に便利です。

まとめ
Httpbinは、HTTPリクエストのテストやデバッグに非常に便利なツールであり、Python + Flaskで書かれたHTTP Request & Responseサービスです。Httpbinには様々なAPIエンドポイントが用意されており、それぞれ異なる機能を提供しています。これらのエンドポイントを活用することで、APIの動作を理解したり、正確な動作を確保したりすることができます。
さらに、ApidogというAPIテストツールを使用することで、より便利にAPIのテストを行うことができます。Apidogは直感的なUIを備えており、ただの1クリックでAPIの単体テストを行うことができます。
Httpbinは、APIの開発やテストにおいて非常に便利なツールであり、Apidogと組み合わせることでさらに強力なテスト環境を構築できます。本記事を参考に、ぜひHttpbinとApidogを活用して、APIの開発とテストを円滑に進めてください。