How do I only display simplehttpwebsite_content.html
when I visit localhost:8080
? So that I can\'t see my filetree, only the webpage. All these fil
Building on Susam Pal's answer, here is my implementation which allows the port to be set (just like when you run python -m SimpleHTTPServer 8080
) and also serves up html pages when the file exists on the file server, without the .html extension.
#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer
import os.path
import sys
class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
possible_name = self.path.strip("/")+'.html'
if self.path == '/':
# default routing, instead of "index.html"
self.path = '/simplehttpwebpage_content.html'
elif os.path.isfile(possible_name):
# extensionless page serving
self.path = possible_name
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
Handler = MyRequestHandler
port = 8000
if len(sys.argv) > 1:
try:
p = int(sys.argv[1])
port = p
except ValueError:
print "port value provided must be an integer"
print "serving on port {0}".format(port)
server = SocketServer.TCPServer(('0.0.0.0', port), Handler)
server.serve_forever()
you should call your file index.html
, that's the page that gets served automatically instead of listing the directory.
the other possibility would be to override the handlers list_directory(self, path)
method.
You can extend SimpleHTTPServer.SimpleHTTPRequestHandler
and override the do_GET
method to replace self.path
with simplehttpwebpage_content.html
if /
is requested.
#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer
class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.path = '/simplehttpwebpage_content.html'
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
Handler = MyRequestHandler
server = SocketServer.TCPServer(('0.0.0.0', 8080), Handler)
server.serve_forever()
Since SimpleHTTPServer.SimpleHTTPRequestHandler extends BaseHTTPServer.BaseHTTPRequestHandler, you can read their documentations to figure what methods and instance variables are available and how you can manipulate them.
You can find the path
variable mentioned in the documentation of BaseHTTPServer.BaseHTTPRequestHandler. You can find the do_GET()
method mentioned in the documentation of SimpleHTTPServer.SimpleHTTPRequestHandler.
Here is some output from my shell to show what happens when I run this program and then I try to access http://localhost:8080/
susam@swift:~/so$ ls
simplehttpwebpage_content.html simplehttpwebpage.py simplehttpwebsite_style.css
susam@swift:~/so$ python simplehttpwebpage.py
swift - - [19/Apr/2012 09:10:23] "GET / HTTP/1.1" 200 -
swift - - [19/Apr/2012 09:10:26] "GET /simplehttpwebsite_style.css HTTP/1.1" 200 -