Pregunta

Al ejecutar una aplicación CherryPy, enviará una etiqueta con el nombre del servidor, algo así como CherryPy / versión. ¿Es posible renombrar / sobrescribir eso desde la aplicación sin modificar CherryPy para que muestre algo más?

Tal vez algo como MyAppName / version (CherryPy / version)

¿Fue útil?

Solución 2

En realidad, preguntar por IRC en su canal oficial fumanchu me dio una forma más limpia de hacerlo (usando la última versión):

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())

Otros consejos

Esto ahora se puede configurar por aplicación en el archivo de configuración / dict

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

Esta cadena parece estar configurada en CherrPy Respuesta clase:

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

Entonces, cuando esté creando su objeto Response, puede actualizar el " Servidor " encabezado para mostrar la cadena deseada. De la CherrPy documentación del objeto de respuesta :

  

encabezados

     

Un diccionario que contiene los encabezados de la respuesta. Puede establecer valores en   este dictado en cualquier momento antes de la fase de finalización, después de lo cual CherryPy cambia   para usar header_list ...

EDIT : para evitar la necesidad de realizar este cambio con cada objeto de respuesta que crees, una forma sencilla de solucionar esto es envolver el objeto de Respuesta. Por ejemplo, puede crear su propio objeto de respuesta que se hereda de la respuesta de CherryPy y actualice la clave de encabezados después de inicializar:

class MyResponse(Response):

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

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

Luego puedes llamar a tu objeto para usos donde necesites crear un objeto de Respuesta, y siempre tendrá el encabezado del servidor configurado en la cadena deseada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top