默认情况下,SimpleHTTPServer会发送自己的标题。
我一直在试图找出如何发送自己的标题并找到this solution。我尝试将它改编为我的(非常)简单代理:
import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
headers = ['Date: Wed, 29 Oct 2014 15:54:43 GMT', 'Server: Apache', 'Accept-Ranges: bytes', 'X-Mod-Pagespeed: 1.6.29.7-3566', 'Vary: Accept-Encoding', 'Cache-Control: max-age=0, no-cache', 'Content-Length: 204', 'Connection: close', 'Content-Type: text/html']
def end_headers(self):
print "Setting custom headers"
self.custom_headers()
SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)
def custom_headers(self):
for i in self.headers:
key, value = i.split(":", 1)
self.send_header(key, value)
def do_GET(self):
self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', PORT), Proxy)
httpd.serve_forever()
但是end_headers()
没有设置自定义标头(在Wireshark上确认)。
根据我的小片段中的headers
列表,我如何覆盖SimpleHTTPServer's
默认标头和服务器?
答案 0 :(得分:0)
我想你错过do_GET()
中的某些内容。
SimpleHTTPServer
也会调用
self.send_response(200)
请参阅以下代码或更好的模块SimpleHTTPServer
self.send_response(200)
self.send_header("Content-type", ctype)
fs = os.fstat(f.fileno())
self.send_header("Content-Length", str(fs[6]))
self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
self.end_headers()
我认为您应该覆盖send_head()
方法以了解您想要做的事情并阅读SimpleHTTPServer
的来源。