سؤال

عند تشغيل تطبيق CherryPy، سيرسل علامة اسم الخادم شيئًا مثل CherryPy/الإصدار.هل من الممكن إعادة تسمية/الكتابة فوق ذلك من التطبيق دون تعديل CherryPy حتى يظهر شيئًا آخر؟

ربما شيء مثل MyAppName/الإصدار (CherryPy/الإصدار)

هل كانت مفيدة؟

المحلول 2

في الواقع، السؤال على 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())

نصائح أخرى

يمكن الآن تعيين هذا على أساس كل تطبيق في ملف التكوين/dict

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

يبدو أنه تم تعيين هذه السلسلة في 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),
  })

لذا، عندما تقوم بإنشاء كائن الاستجابة الخاص بك، يمكنك تحديث رأس "الخادم" لعرض السلسلة المطلوبة.من CherrPy توثيق كائن الاستجابة:

رؤوس

قاموس يحتوي على رؤوس الاستجابة.يمكنك تعيين القيم في هذا القول في أي وقت قبل مرحلة الانتهاء ، وبعد ذلك يتحول Cherrypy إلى استخدام header_list ...

يحرر:لتجنب الحاجة إلى إجراء هذا التغيير مع كل كائن استجابة تقوم بإنشائه، إحدى الطرق البسيطة للتغلب على ذلك هي تغليف كائن الاستجابة.على سبيل المثال، يمكنك إنشاء كائن الاستجابة الخاص بك والذي يرث من استجابة CherryPy ويقوم بتحديث مفتاح الرؤوس بعد التهيئة:

class MyResponse(Response):

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

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

بعد ذلك، يمكنك استدعاء الكائن الخاص بك للاستخدامات التي تحتاج فيها إلى إنشاء كائن استجابة، وسيتم دائمًا تعيين رأس الخادم على السلسلة المطلوبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top