Skip to content

Instantly share code, notes, and snippets.

@udzura
Created March 6, 2014 04:07
Show Gist options
  • Select an option

  • Save udzura/9382210 to your computer and use it in GitHub Desktop.

Select an option

Save udzura/9382210 to your computer and use it in GitHub Desktop.
クライアントからやってくる本物のHTTPリクエストをダンプする ref: http://qiita.com/udzura/items/db49fc086cff2a8aaea3
$ ruby http-dumper.rb -p 3002
$ ruby kage-front.rb -p 3000 --backend-port=3001 --dumper-port=3002
# -*- coding: utf-8 -*-
require 'optparse'
require 'webrick'
require 'json'
options = ARGV.getopts("p:", "port:")
# The :monkey: raises
# cf. http://d.hatena.ne.jp/vividcode/20110505/1304618393
class WEBrick::HTTPServlet::ProcHandler
alias do_PUT do_POST
alias do_DELETE do_POST
end
HORIZON = "\e[31m" + ("#" * 72) + "\e[0m"
def dump_http_request(req)
puts HORIZON
puts req.request_line
puts req.raw_header
puts
if body = req.body
puts body.lines.map{|line| line.gsub /[[:cntrl:]]/, '' }
else
puts "\e[35m*** Empty request body (maybe it is GET) ***\e[0m"
end
puts HORIZON
puts
end
srv = WEBrick::HTTPServer.new(
:BindAddress => "0.0.0.0",
:Port => (options["p"] || options["port"] || raise("Need option -p=PORT")).to_i,
)
srv.mount_proc "/" do |req, res|
dump_http_request(req)
res.content_type = "application/json"
res.body = {return: "OK"}.to_json
end
Signal.trap('INT') { srv.shutdown }
srv.start
require 'optparse'
require 'kage'
options = ARGV.getopts("p:", "port:", "backend-port:", "dumper-port:")
Kage::ProxyServer.start do |server|
server.port = (options["p"] || options["port"] || raise("Need option -p=PORT")).to_i
server.host = '0.0.0.0'
server.debug = false
server.add_master_backend(:dev, 'localhost', options["backend-port"])
server.add_backend(:dump, 'localhost', options["dumper-port"])
server.on_select_backends do |request, headers|
# アセットまでdump serverに送るのはうざったいので適当に振り分ける
is_asset = request[:path] =~ /\.(ico|js|css|gif|png|jpe?g)$/
is_asset ? [:dev] : [:dev, :dump]
end
puts "Server is listening 0.0.0.0:#{server.port}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment