跳转到内容
Guides 2 分钟阅读 1173 次浏览

在 Python 中为 Telegram 机器人配置代理

本指南讲解如何使用 Python 为 Telegram 机器人配置代理。借助 GProxy 提升安全性并绕过限制。

在 Python 中为 Telegram 机器人配置代理

HTTP 代理可让您的 Telegram 机器人通过中间服务器发送请求,从而隐藏其真实 IP 地址,并有可能绕过网络限制。本文详细说明如何使用 Python 为 Telegram 机器人配置代理,涵盖不同的代理类型和身份验证方式。

了解 Telegram 机器人使用的代理

为 Telegram 机器人使用代理有以下几方面好处:

  • 绕过地域限制: 在 Telegram 可能被封锁的地区访问其服务。
  • 增强隐私: 隐藏机器人的 IP 地址,提高匿名性。
  • 负载均衡: 将流量分散到多台服务器上以提升性能。
  • 绕过速率限制: 使用多个代理来规避 Telegram 的 API 速率限制(请合理、合规使用)。

代理类型

您可以使用以下几种代理:

  • HTTP(S) 代理: 工作在应用层,常用于 web 流量。HTTPS 代理提供加密。
  • SOCKS4 代理: 更底层的协议,可承载任意类型的流量,但不支持身份验证。
  • SOCKS5 代理: SOCKS4 的增强版,支持身份验证并可承载 UDP 流量。

下面是对比表:

特性 HTTP(S) SOCKS4 SOCKS5
协议 HTTP SOCKS4 SOCKS5
流量类型 HTTP(S) 任意 任意
身份验证 支持 不支持 支持
加密(HTTPS) 支持 不支持 支持
UDP 支持 不支持 不支持 支持
复杂度

选择合适的代理类型

最佳代理类型取决于您的具体需求:

  • 对于基础的 web 请求,HTTP(S) 代理通常已经足够。
  • 如果需要承载多种类型的流量并且需要身份验证,SOCKS5 是不错的选择。
  • 由于缺少身份验证,通常不推荐使用 SOCKS4。

使用 python-telegram-bot 库配置代理

python-telegram-bot 库提供了将代理集成到机器人中的便捷方式。 配置方法如下:

前置条件

  1. 安装 python-telegram-bot 库:

    bash pip install python-telegram-bot

  2. 获取代理服务器地址(例如 http://your_proxy_address:port),如有需要还需获取身份验证凭据(用户名和密码)。

代码示例:使用 HTTP(S) 代理

import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# 替换为您的 bot token 和代理信息
TOKEN = "YOUR_BOT_TOKEN"
PROXY_URL = "http://your_proxy_address:port" # HTTPS 则用 "https://your_proxy_address:port"
PROXY_USERNAME = "your_username" # 可选
PROXY_PASSWORD = "your_password"  # 可选


def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!")

def echo(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)

def main():
    # 创建代理对象
    request_kwargs = {
        'proxy_url': PROXY_URL,
    }

    # 如有需要则添加身份验证
    if PROXY_USERNAME and PROXY_PASSWORD:
        request_kwargs['urllib3_proxy_kwargs'] = {
            'username': PROXY_USERNAME,
            'password': PROXY_PASSWORD,
        }

    # 使用代理创建 bot 实例
    bot = telegram.Bot(token=TOKEN, request_kwargs=request_kwargs)

    # 创建 Updater 并传入 bot token
    updater = Updater(bot=bot, use_context=True)

    # 获取 dispatcher 以注册 handler
    dp = updater.dispatcher

    # 添加命令 handler
    dp.add_handler(CommandHandler("start", start))

    # 添加消息 handler
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    # 启动 bot
    updater.start_polling()

    # 运行 bot,直到按下 Ctrl-C 或进程收到 SIGINT、
    # SIGTERM 或 SIGABRT。大多数情况下都应这样使用,因为
    # start_polling() 是非阻塞的,并会优雅地停止 bot。
    updater.idle()

if __name__ == '__main__':
    main()

说明:

  1. 导入所需模块: telegramUpdaterCommandHandlerMessageHandlerFilters
  2. 定义 bot token 和代理信息: 将占位符替换为您的实际值。
  3. 创建 request_kwargs 该字典保存代理 URL。
  4. 添加身份验证(如需要): 如果代理需要身份验证,在 request_kwargs 中加入包含用户名和密码的 urllib3_proxy_kwargs
  5. 创建 telegram.Bot 实例: 传入 request_kwargs 字典以配置代理。
  6. 创建 Updater 实例: 将 bot 对象传给 Updater。
  7. 注册 handler: 为机器人添加命令和消息 handler。
  8. 启动 polling: 启动机器人以监听更新。

代码示例:使用 SOCKS5 代理

import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# 替换为您的 bot token 和代理信息
TOKEN = "YOUR_BOT_TOKEN"
PROXY_URL = "socks5://your_proxy_address:port" # 或用 "socks5h://your_proxy_address:port" 在代理服务器上解析主机名
PROXY_USERNAME = "your_username" # 可选
PROXY_PASSWORD = "your_password"  # 可选


def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!")

def echo(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)

def main():
    # 创建代理对象
    request_kwargs = {
        'proxy_url': PROXY_URL,
    }

    # 如有需要则添加身份验证
    if PROXY_USERNAME and PROXY_PASSWORD:
        request_kwargs['urllib3_proxy_kwargs'] = {
            'username': PROXY_USERNAME,
            'password': PROXY_PASSWORD,
        }

    # 使用代理创建 bot 实例
    bot = telegram.Bot(token=TOKEN, request_kwargs=request_kwargs)

    # 创建 Updater 并传入 bot token
    updater = Updater(bot=bot, use_context=True)

    # 获取 dispatcher 以注册 handler
    dp = updater.dispatcher

    # 添加命令 handler
    dp.add_handler(CommandHandler("start", start))

    # 添加消息 handler
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    # 启动 bot
    updater.start_polling()

    # 运行 bot,直到按下 Ctrl-C 或进程收到 SIGINT、
    # SIGTERM 或 SIGABRT。大多数情况下都应这样使用,因为
    # start_polling() 是非阻塞的,并会优雅地停止 bot。
    updater.idle()

if __name__ == '__main__':
    main()

SOCKS5 的主要差异:

  • PROXY_URL 格式: 使用 socks5://socks5h:// 方案。 socks5h:// 告诉库在代理服务器上解析主机名,而不是在本地解析。

处理代理错误

妥善处理与代理连接相关的潜在错误非常重要。常见错误包括:

  • telegram.error.NetworkError: 表示网络相关问题,例如代理不可达或连接超时。
  • telegram.error.Unauthorized:表示代理身份验证失败。

将机器人逻辑包裹在 try...except 块中以捕获这些异常并妥善处理,例如记录错误日志或尝试用另一个代理重新连接。

try:
    updater.start_polling()
except telegram.error.NetworkError as e:
    print(f"Network error: {e}")
    # 实现重试逻辑或切换到另一个代理
except telegram.error.Unauthorized as e:
    print(f"Authentication error: {e}")
    # 检查代理凭据

测试代理配置

配置好代理后,请验证其是否正常工作。 可以通过以下方式实现:

  1. 检查机器人的 IP 地址: 通过机器人向显示 IP 地址的服务发送请求(例如 https://httpbin.org/ip api.ipify.org),并与您的真实 IP 地址比较。 IP 地址应为代理服务器的地址。

  2. 监控网络流量: 使用网络监控工具(例如 Wireshark)观察机器人发出的流量。 流量应经由所配置的代理转发。

使用代理的最佳实践

  • 选择信誉良好的代理服务商: 选择口碑良好、隐私政策透明的服务商。
  • 保护代理凭据: 妥善保管代理用户名和密码,防止未授权访问。
  • 监控代理性能: 定期检查代理的速度与稳定性,以保证最佳性能。
  • 轮换代理: 可考虑使用代理池并进行轮换,以避免被检测和触发速率限制。
  • 遵守 Telegram API 规范: 避免可能压垮服务器的过量请求。 若以滥用方式使用代理绕过速率限制,将违反 Telegram 的 ToS。

结论

在 Python 中为 Telegram 机器人配置代理,借助 python-telegram-bot 库是一个简单的过程。理解不同的代理类型和身份验证方式后,您可以有效提升机器人的隐私性、绕过限制并改善性能。使用代理时请始终把安全放在首位,并遵守 Telegram API 规范。记得妥善处理可能出现的错误,并充分测试您的配置。

已更新: 26.01.2026
返回分类

试用我们的代理

遍布 100+ 国家的 20,000+ 代理

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.