If you read the source you will see that only the port can be overridden on the command line. If you want to change the host it is served on, you will need to implement the test()
method of the SimpleHTTPServer
and BaseHTTPServer
yourself. But that should be really easy.
Here is how you can do it, pretty easily:
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()
And to use it:
> 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 ...
http.server
allows binding right away, e.gpython3 -m http.server --bind 127.0.0.1 8000
would suffice – humanityANDpeaceSimpleHTTPServer
is single-threading and blocking, meaning you won't be able to do another request until the previous request is over. And it has no range support e.g. for streaming/seeking a media file from a specific position. A better alternative istwisted
(pip install twisted
) which you can run withtwistd -n web --path /
. It can also do anonymous FTP withtwistd -n ftp -p 2121 -r /
. More http server one-liners: gist.github.com/willurd/5720255. – ccpizza