我正在创建一个通过 webhook 获取更新的电报机器人。 所以,我成功注册了带有 url 的 webhook,如下所示:
https://my-app.herokuapp.com/123456789:aglbfiwefiuwehwelf # url with fake token
然后我添加了一个路由来处理更新:
app.router.add_route('POST', '/123456789:aglbfiwefiuwehwelf', webhook)
该机器人托管在 heroku 上,当我运行它时,我在 heroku 日志中看到 404 错误。我在本地进行了测试,发现 aiohttp 无法解析带冒号的 url。我通过使用变量解决了这个问题
app.router.add_route('POST', '/{token}', webhook)
,但我感兴趣的是为什么 aiohttp 实际上不允许在 url 路径中使用冒号?
最佳答案
在 GitHub 中,您可以通过 Blame 历史查看更改代码库特定部分的提交。
- 最初在85668a 中只检查它不是None| .
- 然而,这太宽松了,因此设置了一个限制,只接受 a2aa20 中的 Python 标识符。 .
- 然后似乎需要更多的放松,所以98e3a9通过为点和冒号添加分隔符使规则更加宽松。这是版本 0.18.1。
- 添加了下一个破折号 8cc211 .
- 最后也允许使用下划线 3fd3d6
所以从 0.18.1 开始,允许使用冒号。我建议你升级你的 aiohttp 依赖。
另外请注意,我不是 100% 确定您是否可以在您的 url 模式中使用括号,请参阅 85668a .
关于python - 为什么 aiohttp 不允许在 url 路径中使用冒号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124075/