【发布时间】:2013-12-06 11:56:43
【问题描述】:
我的问题很简单也很直接。当我在浏览器上键入 localhost:9999/ok.jpg 时,我正在运行的服务器不会显示图像。我可能遗漏了一些关于服务器设置的概念。
代码如下:
import socket
import threading
import socketserver
import os
class MyHandler(socketserver.BaseRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header("Content-type", "image/jpg")
self.end_headers()
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "image/jpg")
self.end_headers()
f = open('ok.jpg', 'rb')
self.wfile.write(f.read())
f.close()
class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
def __init__(self, server_adress, RequestHandlerClass):
self.allow_reuse_address = True
socketserver.TCPServer.__init__(self, server_adress, RequestHandlerClass, False)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = MyServer((HOST, PORT), MyHandler)
server.server_bind()
server.server_activate()
server_thread = threading.Thread(target=server.serve_forever)
server_thread.start()
感谢您提供任何可能的帮助。
【问题讨论】:
-
也许可以尝试添加 Content-Length 标头
-
您的
MyHandler类不会覆盖从其基类继承的默认RequestHandler.handle()方法(什么都不做)。 -
@martineau 你能详细说明一下吗?我正在使用
def handle(self)并认为我需要更改为 do_HEAD 和 do_GET -
我的评论基于documentation 和以下示例。为了避免必须自己定义
RequestHandler.handle()并只提供do_xxx()方法,您应该从类SimpleHTTPServer.SimpleHTTPRequestHandler派生。
标签: python image http header http-headers