无法使用 SocketServer 和 BaseHTTPServer 提供本地目录中的文件

Unable to serve files in local directory using SocketServer & BaseHTTPServer

这是使用 python 2.7.6

我正在尝试从我的本地当前工作目录提供文件。我正在尝试从该目录中设置 运行 的服务器,但无法显示其中的任何文件。

我一直在尝试 运行 找到的代码 here 来设置一个服务器来侦听当前目录中的 http 请求,但没有成功将文件发送到展示。

我一直在尝试显示此目录中存在的 html 文件 images.html,但是当我 运行 以下脚本并导航到 127.0.0.1:8000/ images.html 在我的浏览器中,我只得到一个空白页面。尝试导航到 127.0.0.1:8000/ 以显示目录内容时也会发生这种情况。

import SocketServer
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer


class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print self.path
        self.send_response(200)


httpd = SocketServer.TCPServer(("", 8000), MyHandler)
httpd.serve_forever()

当我导航到 127.0.0.1:8000/images.html 时,服务器正在 运行ning 我得到了预期的命令行输出:

127.0.0.1 - - [29/May/2015 20:03:43] "GET /images.html HTTP/1.1" 200 -
/images.html

但是,如果我 运行

 python -m SimpleHTTPServer 8000 

从当前目录并导航到 127.0.0.1:8000/images.html,html 文件 会按预期显示

我错过了什么?

您正在为服务器提供自己的处理程序。当 GET 请求传入时,它会调用您的处理程序来尝试为请求提供服务。但是,您的处理程序不会从磁盘加载任何文件,也不会将它们写入套接字(可以使用 self.wfile.write 完成)。因此,您正在覆盖 do_GET 的默认行为,即发回目录列表或请求的文件,而是在处理这些请求时指示它不执行任何操作(好吧,打印到标准输出) .

您可能想查看 https://wiki.python.org/moin/BaseHttpServer 中的示例,以查看具有尝试实际执行操作的处理程序的示例。