Skip to main content

简介

  • 本文将引导你把 python-telegram-bot 的 HTTP 后端从 httpx 更换为 aiohttp。httpx 和 aiohttp 都是用于发起 HTTP 请求的库。
  • 在开始之前,请确保你的环境中已安装 Python 和 python-telegram-bot 库。python-telegram-bot 的安装命令见下方。

更换库

安装

  • 首先,你需要一个库,它提供了一个用于处理向 Telegram 发起请求的类。安装带有 aiohttp_request 扩展的 ptbcontrib,它也会一并安装 aiohttp:
  • 将相同的依赖添加到你的 requirements.txt 中,以便 Square Cloud 在部署时安装它们:
requirements.txt

将 httpx 更换为 aiohttp

  • 接下来,我们需要在实例化机器人客户端的文件中导入 AiohttpRequest。
  • 这个类将处理所有向 Telegram 发起的请求,而不是默认的 httpx。
  • AiohttpRequest 将在 PTB 客户端实例中使用,如下例所示。两个示例都从 TELEGRAM_BOT_TOKEN 环境变量读取机器人令牌,因此令牌永远不会出现在你的代码中:

在 Square Cloud 上运行

在项目根目录创建 squarecloud.app 文件。对于主文件为 main.py 的机器人:
squarecloud.app
然后将令牌设置为 TELEGRAM_BOT_TOKEN 环境变量:可以在上传表单的 Advanced configuration 中、在应用的 Environment Variables 页面中(之后重启机器人),或通过 CLI 设置:
详情请参阅环境变量,完整的部署流程请参阅 Telegram 机器人教程。

为什么要做这个更换?

  • 在长时间轮询 Telegram 的机器人中,默认的 httpx 后端可能会频繁抛出 NetworkError 异常,例如 ReadError。切换到 aiohttp 是消除这些错误的常用方法。
  • 如果你的机器人运行时没有出现这些错误,就不需要做这个更换。

后续步骤

Telegram 机器人

从零开始创建、部署并测试 Telegram 机器人。

环境变量

管理机器人的令牌和其他密钥。

应用无法启动

修复 ModuleNotFoundError 和其他启动失败问题。

你喜欢这篇文章吗?

  • 我们精心创作了这些内容,只为提供尽可能好的帮助。 如果这篇文章对你有任何帮助,请支持我们的工作!已经有开发者在 Google 和 Trustpilot 上给 Square Cloud 打出了 4.9/5 分(共 402 条评价),也留下你的评价吧!这能帮助我们了解什么对你最重要。

Google Reviews

在 Google Reviews 上留下你的评价。

Trustpilot

在 Trustpilot 上留下你的评价。