无法使用 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 中的示例,以查看具有尝试实际执行操作的处理程序的示例。
这是使用 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 中的示例,以查看具有尝试实际执行操作的处理程序的示例。