Pergunta

Ao executar um aplicativo CherryPy ele irá enviar nome do servidor tag algo como CherryPy / versão. É possível renomear / sobrepor que a partir do aplicativo sem modificar CherryPy por isso vai mostrar outra coisa?

Talvez algo como MyAppName / versão (CherryPy / versão)

Foi útil?

Solução 2

Na verdade pedindo no IRC em seu fumanchu canal oficial gived me uma maneira mais limpa para fazer isso (usando a mais recente 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())

Outras dicas

Isso pode agora ser definido em uma base por aplicativo no arquivo de configuração / dict

[/]  
response.headers.server = "CherryPy Dev01"

Essa seqüência parece estar a ser determinado, no CherrPy Response classe:

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),
  })

Assim, quando você está criando o seu objeto de resposta, você pode atualizar o cabeçalho "Server" para exibir a seqüência desejada. Do CherrPy Response documentação objeto :

cabeçalhos

Um dicionário que contém os cabeçalhos da resposta. Você pode definir valores em este dict qualquer momento antes da fase de finalização, após o qual CherryPy muda a usar header_list ...

Editar : Para evitar a necessidade de fazer essa alteração com cada objeto de resposta que você cria, uma maneira simples de contornar este problema é para embrulhar o objeto Response. Por exemplo, você pode criar seu próprio objeto de resposta que herda de resposta do CherryPy e atualiza a chave cabeçalhos após a inicialização:

class MyResponse(Response):

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

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

Depois, você pode pode chamar seu objeto para usos em que você precisa para criar um objeto de resposta, e ele sempre terá o conjunto de cabeçalho Server para sua seqüência desejada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top