simplehttpwebsite_content.html
にアクセスしたときにlocalhost:8080
のみを表示するにはどうすればよいですか?ファイルツリーが表示されないように、Webページのみが表示されます。これらのファイルはすべて同じディレクトリにあります。
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;}
_SimpleHTTPServer.SimpleHTTPRequestHandler
_が要求された場合は、_do_GET
_を拡張し、_self.path
_メソッドをオーバーライドして、_simplehttpwebpage_content.html
_を_/
_に置き換えることができます。
_#!/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()
_
_SimpleHTTPServer.SimpleHTTPRequestHandler
_ extends _BaseHTTPServer.BaseHTTPRequestHandler
_ なので、ドキュメントを読んで、使用可能なメソッドとインスタンス変数、およびそれらを操作する方法を理解できます。
_BaseHTTPServer.BaseHTTPRequestHandler
_ のドキュメントに記載されているpath
変数を見つけることができます。 _SimpleHTTPServer.SimpleHTTPRequestHandler
_ のドキュメントに記載されているdo_GET()
メソッドを見つけることができます。
これは、このプログラムを実行してから_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 -
_
ファイルを_index.html
_と呼ぶ必要があります。これは、ディレクトリを一覧表示する代わりに自動的に提供されるページです。
他の可能性は、ハンドラーlist_directory(self, path)
メソッドをオーバーライドすることです。
Susam Palの回答に基づいて、ポートを設定できるようにする実装を次に示します(python -m SimpleHTTPServer 8080
を実行する場合と同様)。また、ファイルがファイルサーバーに存在する場合、.html拡張子なしでhtmlページを提供します。
#!/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()