Asyncio 和 aiohttp 将所有 url 路径路由到处理程序
Posted
技术标签:
【中文标题】Asyncio 和 aiohttp 将所有 url 路径路由到处理程序【英文标题】:Asyncio and aiohttp route all urls paths to handler 【发布时间】:2016-01-02 12:06:49 【问题描述】:我很难找到匹配所有传入 url 的通配符 url 匹配模式。这只是匹配一个只有主机名的 url:
import asyncio
from aiohttp import web
@asyncio.coroutine
def handle(request):
print('there was a request')
text = "Hello "
return web.Response(body=text.encode('utf-8'))
@asyncio.coroutine
def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/', handle)
srv = yield from loop.create_server(app.make_handler(),
'127.0.0.1', 9999)
print("Server started at http://'127.0.0.1:9999'")
return srv
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
因此,无论路径如何,只要有请求,它就应该调用处理程序。如果是http://127.0.0.1:9999/ 或http://127.0.0.1:9999/test/this/test/
我在这里查了http://aiohttp.readthedocs.org/en/stable/web.html#aiohttp-web-variable-handler,没有找到正确的线索
【问题讨论】:
【参考方案1】:您可以使用app.router.add_route('GET', '/tail:.*', handle)
捕获所有网址。
冒号后面的部分(:
)是一个正则表达式。 .*
正则表达式描述了所有内容,包括路径分隔符 (/
) 和其他符号。
【讨论】:
swagger.yaml的路由怎么处理? 不要关注这些事情的关系。 @AndrewSvetlov 你对'/tail:.*'
这个表达式有什么解释吗?
冒号后面的部分是正则表达式。 .*
regexp 描述了一切,包括路径分隔符 (/
) 和其他符号。以上是关于Asyncio 和 aiohttp 将所有 url 路径路由到处理程序的主要内容,如果未能解决你的问题,请参考以下文章
asyncio 网络抓取 101:使用 aiohttp 获取多个 url
我如何*正确*在循环中运行 asyncio/aiohttp 请求?