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

标签 python html 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 时,服务器正在运行,我得到了预期的命令行输出:

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 中的示例查看一个具有尝试实际执行操作的处理程序的示例。

关于python - 无法使用 SocketServer 和 BaseHTTPServer 提供本地目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541493/

相关文章:

python - 树莓派上的 nginx

python - 如何将此 JSON 放入 python 列表或字典中?

onClick 的 Javascript 2 函数

javascript - 函数 IF 但在法语中

java - 如何添加当前在 java 套接字服务器上运行的程序列表?

python - 使用 Python 进行异常检测

php - 将用户输入保存到页面

连接到xampp服务器上的index.php的C程序

Python SocketServer 监听多播

python - 如何在cython中包含C++所需的路径?