Commit defe7f4c authored by Senthil Kumaran's avatar Senthil Kumaran

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.
parent 5642ff9d
...@@ -368,6 +368,15 @@ the previous example, this serves files relative to the current directory. :: ...@@ -368,6 +368,15 @@ the previous example, this serves files relative to the current directory. ::
python -m http.server 8000 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) .. class:: CGIHTTPRequestHandler(request, client_address, server)
......
...@@ -1186,15 +1186,15 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): ...@@ -1186,15 +1186,15 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
self.log_message("CGI script exited OK") self.log_message("CGI script exited OK")
def test(HandlerClass = BaseHTTPRequestHandler, def test(HandlerClass=BaseHTTPRequestHandler,
ServerClass = HTTPServer, protocol="HTTP/1.0", port=8000): ServerClass=HTTPServer, protocol="HTTP/1.0", port=8000, bind=""):
"""Test the HTTP request handler class. """Test the HTTP request handler class.
This runs an HTTP server on port 8000 (or the first command line This runs an HTTP server on port 8000 (or the first command line
argument). argument).
""" """
server_address = ('', port) server_address = (bind, port)
HandlerClass.protocol_version = protocol HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass) httpd = ServerClass(server_address, HandlerClass)
...@@ -1212,12 +1212,16 @@ if __name__ == '__main__': ...@@ -1212,12 +1212,16 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--cgi', action='store_true', parser.add_argument('--cgi', action='store_true',
help='Run as CGI Server') 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', parser.add_argument('port', action='store',
default=8000, type=int, default=8000, type=int,
nargs='?', nargs='?',
help='Specify alternate port [default: 8000]') help='Specify alternate port [default: 8000]')
args = parser.parse_args() args = parser.parse_args()
if args.cgi: if args.cgi:
test(HandlerClass=CGIHTTPRequestHandler, port=args.port) handler_class = CGIHTTPRequestHandler
else: else:
test(HandlerClass=SimpleHTTPRequestHandler, port=args.port) handler_class = SimpleHTTPRequestHandler
test(HandlerClass=handler_class, port=args.port, bind=args.bind)
...@@ -12,6 +12,9 @@ Core and Builtins ...@@ -12,6 +12,9 @@ Core and Builtins
Library 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 - Issue #18937: Add an assertLogs() context manager to unittest.TestCase
to ensure that a block of code emits a message using the logging module. to ensure that a block of code emits a message using the logging module.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment