python - 为什么 aiohttp 不允许在 url 路径中使用冒号?

标签 python http telegram-bot aiohttp

我正在创建一个通过 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 历史查看更改代码库特定部分的提交。

  1. 最初在85668a 中只检查它不是None| .
  2. 然而,这太宽松了,因此设置了一个限制,只接受 a2aa20 中的 Python 标识符。 .
  3. 然后似乎需要更多的放松,所以98e3a9通过为点和冒号添加分隔符使规则更加宽松。这是版本 0.18.1。
  4. 添加了下一个破折号 8cc211 .
  5. 最后也允许使用下划线 3fd3d6

所以从 0.18.1 开始,允许使用冒号。我建议你升级你的 aiohttp 依赖。

另外请注意,我不是 100% 确定您是否可以在您的 url 模式中使用括号,请参阅 85668a .

关于python - 为什么 aiohttp 不允许在 url 路径中使用冒号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124075/

相关文章:

python - matplotlib 的 detrend_linear 显示去趋势 sin(t) 的偏差

python - 安装 PIP Python 3.6.3 Ubuntu 16.04 Zlib 不可用,但已安装

http - rfc2616 中的 "1#"是什么

python-3.x - 如何从 Telegram 中的 UserID 获取用户名?

python - 类方法中的装饰器

node.js - Telegram 机器人 - 每天向用户发送消息

python - 在Python中修改递归函数之外的列表

python - 是否可以将 python 函数转换为类?

html - 通过 http 提供 HTML5 视频

rest - 为什么/何时使用 IoT 发布/订阅协议(protocol)而不是 RESTful HTTP?