如何让Starlette的proxy函数接收所有路径与HTTP请求方法?
解决Starlette代理函数接收所有路径和请求方法的问题
你的代码问题在于:原路由仅匹配根路径/,且默认只处理GET请求,所以无法覆盖所有路径和HTTP方法。修改方案如下:
from starlette.applications import Starlette from starlette.requests import Request from starlette.routing import Route async def proxy(request: Request): # 在此编写你的代理处理逻辑 pass routes = [ # 使用/{path:path}匹配所有路径,methods=["*"]处理所有HTTP方法 Route("/{path:path}", endpoint=proxy, methods=["*"]) ] app = Starlette(routes=routes)
关键修改说明:
- 路径匹配:
"/{path:path}"是Starlette的路径参数语法,:path表示匹配任意长度的路径片段(包括嵌套子路径,如/api/v1/users、/static/css/main.css等),确保所有请求路径都能被路由到proxy函数。 - 请求方法:
methods=["*"]指定该路由接收所有HTTP请求方法(GET、POST、PUT、DELETE、OPTIONS等),如果需要更精准控制,也可以显式列出需要支持的方法,比如methods=["GET", "POST", "PUT"]。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

