Domanda

Quando si esegue un'app CherryPy, verrà inviato un tag nome server simile a CherryPy / versione. È possibile rinominare / sovrascriverlo dall'app senza modificare CherryPy in modo che mostrerà qualcos'altro?

Forse qualcosa come MyAppName / version (CherryPy / version)

È stato utile?

Soluzione 2

In realtà chiedendo a IRC sul loro canale ufficiale fumanchu mi ha dato un modo più pulito per farlo (usando l'ultimo 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())

Altri suggerimenti

Questo può ora essere impostato in base all'applicazione nel file di configurazione / dict

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

Questa stringa sembra essere impostata nella 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),
  })

Quindi quando crei il tuo oggetto Response, puoi aggiornare il " Server " intestazione per visualizzare la stringa desiderata. Da CherrPy Documentazione dell'oggetto risposta :

  

intestazioni

     

Un dizionario contenente le intestazioni della risposta. È possibile impostare i valori in   questo detto in qualsiasi momento prima della fase di finalizzazione, dopo di che CherryPy cambia   all'utilizzo di header_list ...

MODIFICA : per evitare di dover apportare questa modifica ad ogni oggetto di risposta creato, un modo semplice per aggirare il problema è avvolgere l'oggetto Risposta. Ad esempio, puoi creare il tuo oggetto Response che eredita dalla risposta di CherryPy e aggiorna la chiave delle intestazioni dopo l'inizializzazione:

class MyResponse(Response):

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

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

Quindi puoi chiamare il tuo oggetto per usi in cui è necessario creare un oggetto Response e avrà sempre l'intestazione del server impostata sulla stringa desiderata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top