如何使用wsgiref.simple_server覆盖服务器版本字符串?

时间:2013-12-07 01:42:22

标签: python wsgiref

在OSX(darwin)上使用Python 2.7.2,我想隐藏或自定义wsgiref.simple_server.make_server()发送的“Server”响应头。

我尝试了许多事情但没有取得任何成功,并且非常确定这个示例代码应该有效:

from wsgiref import simple_server

class MyWSGIRequestHandler(simple_server.WSGIRequestHandler):

    server_version = "X/1"
    sys_version = "Y/2"

httpd = simple_server.make_server('', 8082, simple_server.demo_app, handler_class=MyWSGIRequestHandler)

print "version_string: %s %s" % (httpd.RequestHandlerClass.server_version, httpd.RequestHandlerClass.sys_version)
# it prints "X/1 Y/2" 
httpd.serve_forever()

但它始终是相同的,并且没有办法摆脱服务器发送的“服务器:WSGIServer / 0.1 Python / 2.7.2 ”。我也尝试在我的类中覆盖version_string方法,例如:类似的东西:

class MyWSGIRequestHandler(simple_server.WSGIRequestHandler):
    def version_string(self):
        return "42"

它什么都没改变,我真的不明白这里发生了什么。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

我终于找到了解决方案,无需重写WSGIRequestHandler。

from wsgiref.simple_server import ServerHandler
ServerHandler.server_software = "Fake Server Name Here"

然后你可以调用make_server()。