1

这是使用 python 2.7.6

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

我一直在尝试运行此处找到的代码来设置一个服务器,该服务器在当前目录中侦听 http 请求,但没有任何运气可以让文件显示。

我一直在尝试显示images.html此目录中存在的 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 时,服务器正在运行,我得到了预期的命令行输出:

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 文件确实按预期显示。

我错过了什么?

4

1 回答 1

3

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

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

于 2015-05-30T02:31:52.280 回答