A Day in the Life

Ruby の http ライブラリの通信を表示する http-dump を作った

f:id:secondlife:20140110170809p:plain

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 の機能にのってるだけです。

どうぞご利用下さい。

記事の一覧 >

関連するかもエントリー

Ruby で並列実行処理を簡単に書く
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティブスレッドの実行は一つのため、マルチコアを生かした処理をかんたんに書くのがいささか面倒だったりしますね。で、 parallel というライブ...
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティ...
ruby の Net::HTTP と curb (curl の ruby binding) の単純な速度比較
ruby の Net::HTTP と curb (curl の ruby binding) の単純な速度比較マラちゃん(懐かしいなこの呼び方)がLLごとのでとっていたので、Ruby だとどうなんだろうと思って curb と Net::HTTP とで測定。$ ruby -I/usr...
ruby の Net::HTTP と curb (curl の ruby binding) の単純な速度比較マラちゃん(懐かしいなこの呼び方...
2012-12-20
Capybara の using_session でセッションを切り替えつつインテグレーションテストをするユーザAとユーザBが順番にアクセスしに来て云々という spec を書きたい、ので ググったら Capybara に using_session なんつー便利メソッドがあった!...
Capybara の using_session でセッションを切り替えつつインテグレーションテストをするユーザAとユーザBが順番にアクセス...