如何解决Python Telegram Bot中的[Errno 111] Connection refused错误
解决Telegram Bot开发中的Connection Refused错误
你在开发Telegram Bot时遇到的ConnectionRefusedError本质是程序无法成功连接到Telegram的API服务器,我来帮你一步步排查和解决:
错误核心原因分析
这个报错的关键是网络连接失败,常见触发场景有:
- 所在地区/网络环境无法直接访问Telegram的API服务器(这是最常见的原因)
- 代码未配置必要的代理(如果你的网络需要代理才能访问外部服务)
- 虽然概率较低,但也可能是URL格式的细微问题(比如方法名规范)
具体解决方案
1. 先验证基础有效性
首先打开浏览器,直接访问这个地址(替换成你的真实Token):https://api.telegram.org/bot<你的TOKEN>/getMe
- 如果浏览器能返回类似
{"ok":true,"result":{"id":xxx,...}}的JSON数据,说明Token和浏览器环境的网络是正常的,问题出在Python代码的网络配置上 - 如果浏览器也打不开,那就是网络环境的问题,必须先解决Telegram API的访问权限(比如使用代理)
2. 给urllib配置代理(适配需要代理的环境)
如果你的网络需要代理才能访问Telegram,修改代码添加代理配置:
import json from urllib.request import urlopen, ProxyHandler, build_opener TOKEN = '你的真实Bot Token' URL = 'https://api.telegram.org/bot{}/'.format(TOKEN) cmd = 'getMe' # 建议使用官方规范的驼峰命名,虽然小写可能也兼容 # 替换为你实际的代理地址和端口 proxy_handler = ProxyHandler({ 'https': 'http://your-proxy-ip:port', 'http': 'http://your-proxy-ip:port' }) opener = build_opener(proxy_handler) try: resp = opener.open(URL + cmd) data = json.load(resp) print("请求成功:", data) except Exception as e: print("错误详情:", e)
3. 改用更易用的专用库(推荐)
手动用urllib处理请求太繁琐,推荐使用python-telegram-bot库,它已经封装了所有API调用和网络细节,包括代理配置:
首先安装库:
pip install python-telegram-bot --upgrade
然后用极简代码测试:
from telegram import Bot TOKEN = '你的真实Bot Token' # 初始化Bot,需要代理的话添加request_kwargs参数 bot = Bot( token=TOKEN, # request_kwargs={'proxy_url': 'http://your-proxy-ip:port'} ) try: bot_info = bot.get_me() print(f"Bot信息: {bot_info.first_name} (ID: {bot_info.id})") except Exception as e: print("错误详情:", e)
额外提醒
- 绝对不要把你的Bot Token泄露给任何人,一旦泄露他人就能完全控制你的Bot
- 国内环境必须使用代理才能访问Telegram API,这是绝大多数开发者遇到这个错误的根源
内容的提问来源于stack exchange,提问作者Pooya Rabiei
相关产品推荐
相关产品推荐

