A simple website with python using SimpleHTTPServer and SocketServer, how to only display the html file and not the whole directory?
html, networking, python
Solution
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 -
Problem
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 files are in the same directory btw. simplehttpwebsite.py ``` #!/usr/bin/env python import SimpleHTTPServer import SocketServer Handler = SimpleHTTPServer.SimpleHTTPRequestHandler server = SocketServer.TCPServer(('0.0.0.0', 8080), Handler) server.serve_forever() ``` simplehttpwebsite_content.html ``` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="simplehttpwebsite_style.css"> </head> <body> This is my first web page </body> </html> ``` simplehttpwebsite_style.css ``` body{background-color:blue;} ```