Question

Lorsque vous exécutez une application CherryPy, il envoie une balise de nom de serveur du type CherryPy / version. Est-il possible de renommer / écraser cela à partir de l'application sans modifier CherryPy pour qu'il affiche autre chose?

Peut-être quelque chose comme MyAppName / version (CherryPy / version)

Était-ce utile?

La solution 2

En fait, demander à IRC sur leur chaîne officielle que fumanchu m’ait donné un moyen plus propre de le faire (en utilisant le dernier 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())

Autres conseils

Ceci peut maintenant être défini application par application dans le fichier de configuration / dict

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

Cette chaîne semble être définie dans le réponse de CherrPy. 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),
  })

Ainsi, lorsque vous créez votre objet Response, vous pouvez mettre à jour le " Serveur " en-tête pour afficher votre chaîne souhaitée. À partir de la documentation sur les objets de réponse de CherrPy :

  

en-têtes

     

Un dictionnaire contenant les en-têtes de la réponse. Vous pouvez définir des valeurs dans   ce dict à tout moment avant la phase de finalisation, après quoi CherryPy bascule   utiliser header_list ...

MODIFIER : pour éviter de devoir effectuer cette modification avec chaque objet de réponse que vous créez, un moyen simple de contourner ce problème consiste à envelopper l'objet de réponse. Par exemple, vous pouvez créer votre propre objet Response qui hérite de la réponse de CherryPy et met à jour la clé d'en-tête après l'initialisation:

class MyResponse(Response):

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

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

Ensuite, vous pouvez appeler votre objet pour des utilisations pour lesquelles vous devez créer un objet Response. L'en-tête du serveur sera toujours défini sur la chaîne souhaitée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top