首页 > 解决方案 > 使用 Cherrypy 映射特定 url 以响应?

问题描述

I'm writing a web app with CherryPy and I need to map the URL /.well-known/acme-challenge/KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU to the response KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU.8bOE0CjbktH8JYB_jq5aFEqbG-37XhHjDAIhWppNkdQ inorder to obtain a ssl certificate.

我试过使用别名,比如

cherrpypy.expose("/.well-known/acme-challenge/KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU")
def ssl_cert_map(self):
    return "KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU.8bOE0CjbktH8JYB_jq5aFEqbG-37XhHjDAIhWppNkdQ"

但是,当我尝试在 /.well-known/acme-challenge/KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU 访问它时,我收到 404 错误。我怎么能做到这样 /.well-known/acme-challenge/KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU 给我 KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU.8bOE0CjbktH8JYB_jqDhWppG-37XhHjN?

标签: pythonroutingcherrypy

解决方案


您没有在cherrypy.expose方法中提及 URL。Expose 方法公开您的类方法以供 Cherrypy 使用。

为了将您的 URL 映射到特定方法,您必须使用RoutesDispatcher.

例子:

import cherrypy

class Root:

    cherrpypy.expose
    def ssl_cert_map(self):
        return "KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU.8bOE0CjbktH8JYB_jq5aFEqbG-37XhHjDAIhWppNkdQ"

app_dispatcher = cherrypy.dispatch.RoutesDispatcher()

app_dispatcher.connect(
name='ssl-cert',
route='/.well-known/acme-challenge/KH5LEgbLPhDrhJ-BAf7cyTXe8qcN6kL4CJQMOLe1fXU',
action='ssl_cert_map',
controller=Root())

if __name__ == '__main__':

    server_config = {
        '/': {
            'request.dispatch': app_dispatcher
        }
    }
    cherrypy.tree.mount(root=None, config=server_config)
    cherrypy.engine.start()

参考:cherrypy - URL 调度程序


推荐阅读