Webプログラムの開発では、クライアンがどのようなパラメータを送信し、サーバーがどのようなレスポンスを返しているのか正確に理解している必要があります。
今回詳細する「httpbin」はこのようなHTTPリクエストとレスポンスの確認に便利なWebサービス&ソフトウェアです。Python製のオープンソースソフトウェアで、ローカルにインストールして使用することもできますが、基本的には以下の公式サイトを利用するのが簡単です。
- http://httpbin.org
- https://httpbin.org
- http://eu.httpbin.org
- https://eu.httpbin.org
- https://hub.docker.com/r/kennethreitz/httpbin/
上記URLに対してさまざまなパラメータを追加したHTTPリクエストを送信すると、クライアントのIPアドレスやユーザーエージェント、送信されたパラメータなど、さまざまな情報がJSONデータとして帰ってくるのです。
以下具体的な使用方法を説明します。
httpbinの使用方法
公式サイトのサンプルではコマンドラインツール「curl」を利用しています。
最もわかりやすいipアドレスを取得するサンプルは以下の通りです。URLの末尾に/ipを結合します。
$ curl http://httpbin.org/ip {"origin": "24.127.96.129"}
クライアントのユーザーエージェントを取得する場合/useragentを追加します。
$ curl http://httpbin.org/user-agent {"user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3"}
通常のGETリクエストのテストを行いたい場合/getを指定します。パラメータも指定可能で、戻り値の中に"args"として含まれていることが分かります。
$ curl https://httpbin.org/get?show_env=1 { "headers": { "Content-Length": "", "Accept-Language": "en-US,en;q=0.8", "Accept-Encoding": "gzip,deflate,sdch", "X-Forwarded-Port": "443", "X-Forwarded-For": "109.60.101.240", "Host": "httpbin.org", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11", "X-Request-Start": "1350053933441", "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", "Connection": "keep-alive", "X-Forwarded-Proto": "https", "Cookie": "_gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1; _gauges_unique_hour=1", "Content-Type": "" }, "args": { "show_env": "1" }, "origin": "109.60.101.240", "url": "http://httpbin.org/get?show_env=1" }
レスポンスのHTTPステータスコードを取得したい場合/status/:codeを指定します。curlの場合"-I"オプションを指定してレスポンスヘッダーを表示する必要があります。
$ curl -I http://httpbin.org/status/418 HTTP/1.1 418 I'M A TEAPOT Server: nginx/0.7.67 Date: Mon, 13 Jun 2011 04:25:38 GMT Connection: close x-more-info: http://tools.ietf.org/html/rfc2324 Content-Length: 135
URLの末尾に/postを追加すればデータをPOSTすることもできます。curlの場合"-X POST -d "foo=bar"のようなオプションを利用します。戻り値の"form"の中にPOSTしたデータが含まれていることが分かります。
$ curl -X POST -d "foo=bar" http://httpbin.org/post { "args": {}, "data": "", "files": {}, "form": { "foo": "bar" }, "headers": { "Accept": "*/*", "Connection": "close", "Content-Length": "7", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "curl/7.54.0" }, "json": null, "origin": "109.60.101.240", "url": "http://httpbin.org/post" }
その他/gzipでgzipでエンコードされたデータを返却するよう要求したり、/delay:nでレスポンスを遅らせたりなど、さまざな機能が利用可能です。詳細は公式サイトのドキュンとをご確認ください。
ローカルにインストールする場合
最初に述べた通りhttpbinはツールとしても提供されていて、自分の好みのサイトに展開して利用することも可能です。その場合以下のようにインストールします。
$ pip install httpbin $ gunicorn httpbin:app
ローカル環境でテストしたい場合はこの方が便利かもしれません。
まとめ
httpbinを利用すれば通常は面倒なHTTP通信のテストを効率よく行うことができます。クライアントは特にcurlに限定されているわけではありませんので、自分好みのクライアントを利用すれば良いでしょう。当然ながらGET系のリクエストはWebブラウザを利用して発行することもできます。
Web開発の用途以外にも、自分のIPアドレスやユーザーエージェント文字列を知りたい場合に便利にも利用できそうなサイトです。