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

时间:2015-05-30 02:09:21

标签: 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文件 按预期显示。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

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