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.
This commit is contained in:
Senthil Kumaran 2013-09-15 09:37:27 -07:00
parent 5642ff9d8e
commit defe7f4c62
3 changed files with 21 additions and 5 deletions

View file

@ -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)

View file

@ -1187,14 +1187,14 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
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__':
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)

View file

@ -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.