Ruby の http ライブラリの通信を表示する http-dump を作った
Ruby 上で http を叩いた通信見たい時に、毎回同じ事をやってるので抽象化して http-dump というライブラリを作った。
$ gem install http-dump
require 'net/http' require 'uri' require 'http-dump' HTTPDump.dump { Net::HTTP.get(URI('http://example.com')) }
と http でやりとりしてるコードを block で囲むと、以下のように出力される。
> GET http://example.com/ with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Host'=>'example.com', 'User-Agent'=>'Ruby'} < 200 OK < Accept-Ranges: bytes < Cache-Control: max-age=604800 < Content-Type: text/html < Date: Fri, 03 Jan 2014 13:42:51 GMT < Etag: "359670651" < Expires: Fri, 10 Jan 2014 13:42:51 GMT < Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT < Server: ECS (sjc/4FB4) < X-Cache: HIT < X-Ec-Custom-Error: 1 < Content-Length: 1270 < <!doctype html> <html> <head> <title>Example Domain</title> ... more ...
enable! / disable! で全体的に有効・無効を切り替えられる。
require 'open-uri' require 'http-dump' HTTPDump.enable! open('http://example.com').read HTTPDump.disable!
Rails からなら
group :development do gem 'http-dump', require: ENV['HTTP_DUMP_ENABLE'] ? 'http-dump/enable' : 'http-dump' end
を Gemfile に追加。
HTTP_DUMP_ENABLE=1 bundle exec rails s
で Rails アプリ内部から叩いている http のやりとりを表示、とかに使える。
サポートしてる http のライブラリは net/http ベースの物からその他 WebMock で使える物すべて。http-dump の内部実装は全くたいしたことはやって無くて、WebMock の機能にのってるだけです。
どうぞご利用下さい。