Created
March 6, 2014 04:07
-
-
Save udzura/9382210 to your computer and use it in GitHub Desktop.
クライアントからやってくる本物のHTTPリクエストをダンプする ref: http://qiita.com/udzura/items/db49fc086cff2a8aaea3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| $ ruby http-dumper.rb -p 3002 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| $ ruby kage-front.rb -p 3000 --backend-port=3001 --dumper-port=3002 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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