Skip to content

Instantly share code, notes, and snippets.

@anotherjesse
Created October 12, 2011 17:29
Show Gist options
  • Select an option

  • Save anotherjesse/1281907 to your computer and use it in GitHub Desktop.

Select an option

Save anotherjesse/1281907 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'em-proxy'
require 'http/parser' # gem install http_parser.rb
require 'UUID'
# > ruby em-proxy-http.rb
# > curl --proxy localhost:9889 www.google.com
host = "0.0.0.0"
port = 9889
puts "listening on #{host}:#{port}..."
Proxy.start(:host => host, :port => port) do |conn|
@p = Http::Parser.new
@p.on_headers_complete = proc do |h|
session = UUID.generate
puts "New session: #{session} (#{h.inspect})"
host, port = h['Host'].split(':')
dest = host.split('.').first.gsub('-', '.')
begin
conn.server session, :host => dest, :port => 80
conn.relay_to_servers @buffer
rescue
conn.close_connection
end
@buffer.clear
end
@buffer = ''
conn.on_connect do |data,b|
#puts [:on_connect, data, b].inspect
end
conn.on_data do |data|
@buffer << data
@p << data
data
end
conn.on_response do |backend, resp|
#puts [:on_response, backend, resp].inspect
resp
end
conn.on_finish do |backend, name|
#puts [:on_finish, name].inspect
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment