test/stallion.rb in em-http-request-0.2.4 vs test/stallion.rb in em-http-request-0.2.5
- old
+ new
@@ -125,19 +125,23 @@
elsif stable.request.env["HTTP_IF_NONE_MATCH"]
stable.response.status = 304
elsif stable.request.env["HTTP_AUTHORIZATION"]
- auth = "Basic %s" % Base64.encode64(['user', 'pass'].join(':')).chomp
-
- if auth == stable.request.env["HTTP_AUTHORIZATION"]
+ if stable.request.path_info == '/oauth_auth'
stable.response.status = 200
- stable.response.write 'success'
+ stable.response.write stable.request.env["HTTP_AUTHORIZATION"]
else
- stable.response.status = 401
- end
+ auth = "Basic %s" % Base64.encode64(['user', 'pass'].join(':')).chomp
+ if auth == stable.request.env["HTTP_AUTHORIZATION"]
+ stable.response.status = 200
+ stable.response.write 'success'
+ else
+ stable.response.status = 401
+ end
+ end
elsif stable.request.path_info == '/relative-location'
stable.response.status = 301
stable.response["Location"] = '/forwarded'
elsif
@@ -150,9 +154,66 @@
Thread.new do
begin
Stallion.run :Host => '127.0.0.1', :Port => 8080
rescue Exception => e
print e
+ end
+end
+
+#
+# HTTP Proxy server
+#
+Thread.new do
+ server = TCPServer.new('127.0.0.1', 8082)
+ loop do
+ session = server.accept
+ request = ""
+ while (data = session.gets) != "\r\n"
+ request << data
+ end
+ parts = request.split("\r\n")
+ method, destination, http_version = parts.first.split(' ')
+ if method == 'CONNECT'
+ target_host, target_port = destination.split(':')
+ client = TCPSocket.open(target_host, target_port)
+ session.write "HTTP/1.1 200 Connection established\r\nProxy-agent: Whatever\r\n\r\n"
+ session.flush
+
+ content_length = -1
+ verb = ""
+ req = ""
+
+ while data = session.gets
+ if request = data.match(/(\w+).*HTTP\/1\.1/)
+ verb = request[1]
+ end
+
+ if post = data.match(/Content-Length: (\d+)/)
+ content_length = post[1].to_i
+ end
+
+ req += data
+
+ # read POST data
+ if data == "\r\n" and verb == "POST"
+ req += session.read(content_length)
+ end
+
+ if data == "\r\n"
+ client.write req
+ client.flush
+ client.close_write
+ break
+ end
+ end
+
+ while data = client.gets
+ session.write data
+ end
+ session.flush
+ client.close
+ end
+ session.close
end
end
sleep(1)
\ No newline at end of file