start simple script example create accept python http shell command-line simplehttpserver

script - ¿Es posible ejecutar Python SimpleHTTPServer en localhost solamente?



simple http server windows (3)

Tengo una conexión vpn y cuando estoy ejecutando python -m SimpleHTTPServer, se sirve en 0.0.0.0:8000, lo que significa que se puede acceder a través de localhost y a través de mi IP real. No quiero que los robots me scan y me interesa que se acceda al servidor solo a través de localhost.

¿Es posible?

python -m SimpleHTTPServer 127.0.0.1:8000 # doesn''t work.

También es bienvenido cualquier otro servidor HTTP simple que se pueda ejecutar de forma instantánea utilizando la línea de comandos.


Como explicó @sberry , simplemente hacerlo utilizando el buen método python -m ... no será posible, porque la dirección IP está codificada en la implementación de la función BaseHttpServer.test .

Una forma de hacerlo desde la línea de comandos sin escribir código en un archivo primero sería

python -c ''import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(("127.0.0.1", 8888), shs.SimpleHTTPRequestHandler).serve_forever()''

Si eso todavía cuenta como un trazador de líneas depende del ancho de su terminal ;-) Ciertamente no es muy fácil de recordar.


En las versiones de Python 3.4 y posteriores, el módulo http.server acepta un parámetro de http.server .

De acuerdo con los documentos :

python -m http.server 8000

Por defecto, el servidor se une a todas las interfaces. La opción -b / - bind especifica una dirección específica a la que debería enlazarse. Por ejemplo, el siguiente comando hace que el servidor se enlace solo a localhost:

python -m http.server 8000 --bind 127.0.0.1

Nuevo en la versión 3.4: se introdujo el argumento --bind.


Si lee la fuente, verá que solo el puerto puede anularse en la línea de comando. Si desea cambiar el host en el que se sirve, deberá implementar el método test() del BaseHTTPServer SimpleHTTPServer y BaseHTTPServer usted mismo. Pero eso debería ser realmente fácil.

Aquí es cómo puedes hacerlo, bastante fácil:

import sys from SimpleHTTPServer import SimpleHTTPRequestHandler import BaseHTTPServer def test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=BaseHTTPServer.HTTPServer): protocol = "HTTP/1.0" host = '''' port = 8000 if len(sys.argv) > 1: arg = sys.argv[1] if '':'' in arg: host, port = arg.split('':'') port = int(port) else: try: port = int(sys.argv[1]) except: host = sys.argv[1] server_address = (host, port) HandlerClass.protocol_version = protocol httpd = ServerClass(server_address, HandlerClass) sa = httpd.socket.getsockname() print "Serving HTTP on", sa[0], "port", sa[1], "..." httpd.serve_forever() if __name__ == "__main__": test()

Y para usarlo:

> python server.py 127.0.0.1 Serving HTTP on 127.0.0.1 port 8000 ... > python server.py 127.0.0.1:9000 Serving HTTP on 127.0.0.1 port 9000 ... > python server.py 8080 Serving HTTP on 0.0.0.0 port 8080 ...