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

View File

@ -1186,15 +1186,15 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
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 @@ if __name__ == '__main__':
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)

View File

@ -12,6 +12,9 @@ Core and Builtins
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.