Index: net/tools/testserver/testserver.py |
=================================================================== |
--- net/tools/testserver/testserver.py (revision 9548) |
+++ net/tools/testserver/testserver.py (working copy) |
@@ -75,6 +75,9 @@ |
class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
def __init__(self, request, client_address, socket_server): |
+ self._connect_handlers = [ |
+ self.RedirectConnectHandler, |
+ self.DefaultConnectResponseHandler] |
self._get_handlers = [ |
self.KillHandler, |
self.NoCacheMaxAgeTimeHandler, |
@@ -854,7 +857,7 @@ |
self.wfile.write('<html><head>') |
self.wfile.write('</head><body>Redirecting to %s</body></html>' % dest) |
- return True; |
+ return True |
def ClientRedirectHandler(self): |
"""Sends a client redirect to the given URL. The syntax is |
@@ -893,6 +896,41 @@ |
self.wfile.write(contents) |
return True |
+ def RedirectConnectHandler(self): |
+ """Sends a redirect to the CONNECT request for www.redirect.com. This |
+ response is not specified by the RFC, so the browser should not follow |
+ the redirect.""" |
+ |
+ if (self.path.find("www.redirect.com") < 0): |
+ return False |
+ |
+ dest = "http://www.destination.com/foo.js" |
+ |
+ self.send_response(302) # moved temporarily |
+ self.send_header('Location', dest) |
+ self.send_header('Connection', 'close') |
+ self.end_headers() |
+ return True |
+ |
+ |
+ def DefaultConnectResponseHandler(self): |
+ """This is the catch-all response handler for CONNECT requests that aren't |
+ handled by one of the special handlers above. Real Web servers respond |
+ with 400 to CONNECT requests.""" |
+ |
+ contents = "Your client has issued a malformed or illegal request." |
+ self.send_response(400) # bad request |
+ self.send_header('Content-type', 'text/html') |
+ self.send_header("Content-Length", len(contents)) |
+ self.end_headers() |
+ self.wfile.write(contents) |
+ return True |
+ |
+ def do_CONNECT(self): |
+ for handler in self._connect_handlers: |
+ if handler(): |
+ return |
+ |
def do_GET(self): |
for handler in self._get_handlers: |
if handler(): |
@@ -1015,4 +1053,4 @@ |
options, args = option_parser.parse_args() |
sys.exit(main(options, args)) |
- |
+ |