11

我如何只simplehttpwebsite_content.html在访问时显示localhost:8080?所以我看不到我的文件树,只有网页。所有这些文件都在同一个目录中。

简单的httpwebsite.py

#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
server = SocketServer.TCPServer(('0.0.0.0', 8080), Handler)

server.serve_forever()

简单的httpwebsite_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>

简单的httpwebsite_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.BaseHTTPRequestHandler。你可以找到do_GET()文档中提到的方法SimpleHTTPServer.SimpleHTTPRequestHandler

这是我的 shell 的一些输出,显示了当我运行这个程序然后我尝试访问时会发生什么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

您应该调用您的文件index.html,这是自动提供的页面,而不是列出目录。

另一种可能性是覆盖处理程序list_directory(self, path)方法。

于 2012-05-15T19:53:15.490 回答
0

基于 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()
于 2016-08-24T17:51:33.993 回答