mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 16:26:10 +03:00
108 lines
2.7 KiB
Python
108 lines
2.7 KiB
Python
|
#!/usr/bin/env python
|
||
|
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""This is a simple HTTP server for manually testing exponential
|
||
|
back-off functionality in Chrome.
|
||
|
"""
|
||
|
|
||
|
|
||
|
import BaseHTTPServer
|
||
|
import sys
|
||
|
import urlparse
|
||
|
|
||
|
|
||
|
AJAX_TEST_PAGE = '''
|
||
|
<html>
|
||
|
<head>
|
||
|
<script>
|
||
|
|
||
|
function reportResult(txt) {
|
||
|
var element = document.createElement('p');
|
||
|
element.innerHTML = txt;
|
||
|
document.body.appendChild(element);
|
||
|
}
|
||
|
|
||
|
function fetch() {
|
||
|
var response_code = document.getElementById('response_code');
|
||
|
|
||
|
xmlhttp = new XMLHttpRequest();
|
||
|
xmlhttp.open("GET",
|
||
|
"http://%s:%d/%s?code=" + response_code.value,
|
||
|
true);
|
||
|
xmlhttp.onreadystatechange = function() {
|
||
|
reportResult(
|
||
|
'readyState=' + xmlhttp.readyState + ', status=' + xmlhttp.status);
|
||
|
}
|
||
|
try {
|
||
|
xmlhttp.send(null);
|
||
|
} catch (e) {
|
||
|
reportResult('Exception: ' + e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
<form action="javascript:fetch()">
|
||
|
Response code to get: <input id="response_code" type="text" value="503">
|
||
|
<input type="submit">
|
||
|
</form>
|
||
|
</body>
|
||
|
</html>'''
|
||
|
|
||
|
|
||
|
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||
|
keep_running = True
|
||
|
local_ip = ''
|
||
|
port = 0
|
||
|
|
||
|
def do_GET(self):
|
||
|
if self.path == '/quitquitquit':
|
||
|
self.send_response(200)
|
||
|
self.send_header('Content-Type', 'text/plain')
|
||
|
self.end_headers()
|
||
|
self.wfile.write('QUITTING')
|
||
|
RequestHandler.keep_running = False
|
||
|
return
|
||
|
|
||
|
if self.path.startswith('/ajax/'):
|
||
|
self.send_response(200)
|
||
|
self.send_header('Content-Type', 'text/html')
|
||
|
self.end_headers()
|
||
|
self.wfile.write(AJAX_TEST_PAGE % (self.local_ip,
|
||
|
self.port,
|
||
|
self.path[6:]))
|
||
|
return
|
||
|
|
||
|
params = urlparse.parse_qs(urlparse.urlparse(self.path).query)
|
||
|
|
||
|
if not params or not 'code' in params or params['code'][0] == '200':
|
||
|
self.send_response(200)
|
||
|
self.send_header('Content-Type', 'text/plain')
|
||
|
self.end_headers()
|
||
|
self.wfile.write('OK')
|
||
|
else:
|
||
|
status_code = int(params['code'][0])
|
||
|
self.send_response(status_code)
|
||
|
self.end_headers()
|
||
|
self.wfile.write('Error %d' % int(status_code))
|
||
|
|
||
|
|
||
|
def main():
|
||
|
if len(sys.argv) != 3:
|
||
|
print "Usage: %s LOCAL_IP PORT" % sys.argv[0]
|
||
|
sys.exit(1)
|
||
|
RequestHandler.local_ip = sys.argv[1]
|
||
|
port = int(sys.argv[2])
|
||
|
RequestHandler.port = port
|
||
|
print "To stop the server, go to http://localhost:%d/quitquitquit" % port
|
||
|
httpd = BaseHTTPServer.HTTPServer(('', port), RequestHandler)
|
||
|
while RequestHandler.keep_running:
|
||
|
httpd.handle_request()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|