(original) (raw)

changeset: 85713:a248655c8261 user: Senthil Kumaran senthil@uthcode.com date: Sun Sep 15 09:37:27 2013 -0700 files: Doc/library/http.server.rst Lib/http/server.py Misc/NEWS description: Expose --bind argument for http.server, enable http.server to bind to a user specified network interface. Patch contributed by Malte Swart. Addresses issue #17764. HG :Enter commit message. Lines beginning with 'HG:' are removed. diff -r ed590800fde7 -r a248655c8261 Doc/library/http.server.rst --- a/Doc/library/http.server.rst Sun Sep 15 10:37:57 2013 +0200 +++ b/Doc/library/http.server.rst Sun Sep 15 09:37:27 2013 -0700 @@ -368,6 +368,15 @@ python -m http.server 8000 +By default, server binds itself to all interfaces. To restrict it to bind to a +particular interface only, ``--bind ADDRESS`` argument can be used. For e.g, to +restrict the server to bind only to localhost. :: + + python -m http.server 8000 --bind 127.0.0.1 + +.. versionadded:: 3.4 + ``--bind`` argument was introduced. + .. class:: CGIHTTPRequestHandler(request, client_address, server) diff -r ed590800fde7 -r a248655c8261 Lib/http/server.py --- a/Lib/http/server.py Sun Sep 15 10:37:57 2013 +0200 +++ b/Lib/http/server.py Sun Sep 15 09:37:27 2013 -0700 @@ -1186,15 +1186,15 @@ self.log_message("CGI script exited OK") -def test(HandlerClass = BaseHTTPRequestHandler, - ServerClass = HTTPServer, protocol="HTTP/1.0", port=8000): +def test(HandlerClass=BaseHTTPRequestHandler, + ServerClass=HTTPServer, protocol="HTTP/1.0", port=8000, bind=""): """Test the HTTP request handler class. This runs an HTTP server on port 8000 (or the first command line argument). """ - server_address = ('', port) + server_address = (bind, port) HandlerClass.protocol_version = protocol httpd = ServerClass(server_address, HandlerClass) @@ -1212,12 +1212,16 @@ parser = argparse.ArgumentParser() parser.add_argument('--cgi', action='store_true', help='Run as CGI Server') + parser.add_argument('--bind', '-b', default='', metavar='ADDRESS', + help='Specify alternate bind address ' + '[default: all interfaces]') parser.add_argument('port', action='store', default=8000, type=int, nargs='?', help='Specify alternate port [default: 8000]') args = parser.parse_args() if args.cgi: - test(HandlerClass=CGIHTTPRequestHandler, port=args.port) + handler_class = CGIHTTPRequestHandler else: - test(HandlerClass=SimpleHTTPRequestHandler, port=args.port) + handler_class = SimpleHTTPRequestHandler + test(HandlerClass=handler_class, port=args.port, bind=args.bind) diff -r ed590800fde7 -r a248655c8261 Misc/NEWS --- a/Misc/NEWS Sun Sep 15 10:37:57 2013 +0200 +++ b/Misc/NEWS Sun Sep 15 09:37:27 2013 -0700 @@ -12,6 +12,9 @@ Library ------- +- Issue #17764: Enable http.server to bind to a user specified network + interface. Patch contributed by Malte Swart. + - Issue #18937: Add an assertLogs() context manager to unittest.TestCase to ensure that a block of code emits a message using the logging module. /senthil@uthcode.com