【问题标题】:SimpleHTTPServer Custom HeadersSimpleHTTPServer 自定义标头
【发布时间】:2014-12-25 10:45:05
【问题描述】:

默认情况下,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 列表,就像我的小 sn-p 中的那个一样,我如何覆盖 SimpleHTTPServer's 的默认标头并为我自己的服务器提供服务?

【问题讨论】:

标签: python http http-headers httpserver simplehttpserver


【解决方案1】:

我认为你错过了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 的源代码。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2018-12-18
    • 2016-04-05
    • 2011-01-04
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多