Тег имени сервера CherryPy - PullRequest
       12

Тег имени сервера CherryPy

7 голосов
/ 25 сентября 2008

При запуске приложения CherryPy оно отправляет тег имени сервера примерно как CherryPy / version. Можно ли переименовать / перезаписать это из приложения без изменения CherryPy, чтобы оно показывало что-то еще?

Может быть, что-то вроде MyAppName / version (CherryPy / version)

Ответы [ 3 ]

10 голосов
/ 23 февраля 2013

Теперь это можно установить для каждого приложения в файле конфигурации / dict

[/]  
response.headers.server = "CherryPy Dev01"
5 голосов
/ 16 октября 2008

На самом деле запрос на IRC на их официальном канале fumanchu дал мне более чистый способ сделать это (используя последнюю версию svn):

import cherrypy
from cherrypy import _cpwsgi_server 
class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

serverTag = "MyApp/%s (CherryPy/%s)" % ("1.2.3", cherrypy.__version__)
_cpwsgi_server.CPWSGIServer.environ['SERVER_SOFTWARE'] = serverTag
cherrypy.config.update({'tools.response_headers.on': True,
                        'tools.response_headers.headers': [('Server', serverTag)]})
cherrypy.quickstart(HelloWorld())
4 голосов
/ 26 сентября 2008

Эта строка, кажется, устанавливается в CherrPy Ответ класс:

def __init__(self):
  self.status = None
  self.header_list = None
  self._body = []
  self.time = time.time()

  self.headers = http.HeaderMap()
  # Since we know all our keys are titled strings, we can
  # bypass HeaderMap.update and get a big speed boost.
  dict.update(self.headers, {
    "Content-Type": 'text/html',
    "Server": "CherryPy/" + cherrypy.__version__,
    "Date": http.HTTPDate(self.time),
  })

Таким образом, когда вы создаете свой объект Response, вы можете обновить заголовок «Server» для отображения желаемой строки. Из документации CherrPy Response Object :

заголовки

Словарь, содержащий заголовки ответа. Вы можете установить значения в это диктуется в любое время перед завершающей фазой, после которой CherryPy переключается к использованию header_list ...

РЕДАКТИРОВАТЬ : Чтобы избежать необходимости вносить это изменение с каждым создаваемым вами объектом ответа, один простой способ обойти это - обернуть объект ответа. Например, вы можете создать свой собственный объект Response, который наследуется от Response CherryPy и обновляет ключ заголовков после инициализации:

class MyResponse(Response):

    def __init__(self):
        Response.__init__(self)
        dict.update(self.headers, {
            "Server": "MyServer/1.0",
        })

RespObject = MyResponse()
print RespObject.headers["Server"]

Затем вы можете вызывать ваш объект для использования там, где вам нужно создать объект Response, и в нем всегда будет установлен заголовок сервера на желаемую строку.

...