Tengo una conexión vpn y cuando estoy ejecutando python -m SimpleHTTPServer, 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 escaneen y me interese que se acceda al servidor solo a través de localhost.
¿Es posible?
python -m SimpleHTTPServer 127.0.0.1:8000 # doesn't work.
Cualquier otro servidor http simple que se pueda ejecutar instantáneamente usando la línea de comando también es bienvenido.
python
http
command-line
python-2.x
simplehttpserver
usuario1639431
fuente
fuente
http.server
permite la vinculación de inmediato, por ejemplo,python3 -m http.server --bind 127.0.0.1 8000
sería suficienteSimpleHTTPServer
es un solo subproceso y bloqueo, lo que significa que no podrá realizar otra solicitud hasta que finalice la solicitud anterior. Y no tiene soporte de rango, por ejemplo, para transmitir / buscar un archivo multimedia desde una posición específica. Una mejor alternativa estwisted
(pip install twisted
) con la que puede ejecutartwistd -n web --path /
. También puede hacer FTP anónimo contwistd -n ftp -p 2121 -r /
. Más frases breves del servidor http: gist.github.com/willurd/5720255 .Respuestas:
Si lee la fuente, verá que solo el puerto se puede anular en la línea de comando. Si desea cambiar el host en el que se sirve, deberá implementar el
test()
método deSimpleHTTPServer
yBaseHTTPServer
usted mismo. Pero eso debería ser realmente fácil.Así es como puede hacerlo, con bastante facilidad:
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 ...
fuente
En las versiones 3.4 y superiores de Python, el
http.server
módulo acepta unbind
parámetro.Según los documentos :
fuente
Como explicó @sberry , simplemente hacerlo usando el
python -m ...
método nice no será posible, porque la dirección IP está codificada en la implementación de laBaseHttpServer.test
función.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 una línea, depende del ancho de su terminal ;-) Ciertamente no es muy fácil de recordar.
fuente
H
. ¡Gracias! - gist.github.com/cmawhorter/f2a09bcf63c68b0cff10python -c "import http.server as hs; hs.HTTPServer(('127.0.0.1', 8888), hs.SimpleHTTPRequestHandler).serve_forever()"
Tenga en cuenta el cambio en la cita y el hecho de que Base y Simple HTTP Server ahora están en http.server.