这是使用 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/