11

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;}
4

3 に答える 3

23

が要求された場合に置き換えるメソッドを拡張SimpleHTTPServer.SimpleHTTPRequestHandlerおよびオーバーライドできます。do_GETself.pathsimplehttpwebpage_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.SimpleHTTPRequestHandlerextends以来BaseHTTPServer.BaseHTTPRequestHandler、それらのドキュメントを読んで、利用可能なメソッドとインスタンス変数と、それらをどのように操作できるかを理解できます。

pathのドキュメントに記載されている変数を見つけることができますBaseHTTPServer.BaseHTTPRequestHandlerdo_GET()のドキュメントに記載されている方法を見つけることができますSimpleHTTPServer.SimpleHTTPRequestHandler

このプログラムを実行してからアクセスしようとするとどうなるかを示すシェルからの出力を次に示します。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 -
于 2012-05-15T20:01:06.247 に答える
12

file を呼び出す必要がありますindex.html。これは、ディレクトリをリストする代わりに自動的に提供されるページです。

もう 1 つの可能性は、handlerslist_directory(self, path)メソッドをオーバーライドすることです。

于 2012-05-15T19:53:15.490 に答える