You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Telethon使用SOCKS5代理连接Telegram超时:在线检测可用但Python代码报GeneralProxyError错误

Telethon使用SOCKS5代理连接Telegram超时:在线检测可用但Python代码报GeneralProxyError错误

这种情况我之前踩过坑!明明在线代理检测工具显示正常,但一跑Telethon代码就超时报GeneralProxyError,确实挺闹心的。咱们从几个常见的排查方向入手,一步步解决:


1. 先调整代理的rdns参数(最常见的解决办法)

你代码里把rdns设为True,这会让代理服务器负责解析Telegram的域名,但很多公共SOCKS5代理并不支持远程DNS解析功能,反而会导致超时。改成False让本地解析域名后再发请求给代理,大概率能解决问题:

修改后的代理配置:

proxy = {
    'proxy_type': 'socks5',
    'addr': '194.32.229.199',
    'port': 1050,
    'username': 'user',
    'password': 'pass',
    'rdns': False  # 这里改成False
}

2. 增加连接超时时间

Telethon默认的超时阈值比较短,如果你的代理延迟偏高,很容易触发超时。可以在初始化TelegramClient时手动设置更长的超时(比如15-30秒):

with TelegramClient(
    StringSession(),
    api_id,
    api_hash,
    proxy=proxy,
    connection=ConnectionTcpAbridged,
    timeout=15  # 按需调整,比如15秒
) as client:
    # 原代码逻辑

3. 更换连接类型尝试

虽然ConnectionTcpAbridged官方说对代理友好,但部分代理环境下,换成ConnectionTcpFull反而更稳定。先导入对应的连接类,再替换:

from telethon.network.connection.tcpfull import ConnectionTcpFull

# 然后在TelegramClient里修改connection参数
with TelegramClient(
    StringSession(),
    api_id,
    api_hash,
    proxy=proxy,
    connection=ConnectionTcpFull  # 换成这个
) as client:
    # 原代码逻辑

4. 验证代理是否真的能访问Telegram

在线检测工具通常只是测试「能否连通代理服务器」,但没测「能否通过代理访问Telegram的API服务器」。你可以用curl在本地终端验证:

# 替换成你的代理信息
curl -x socks5://user:pass@194.32.229.199:1050 https://api.telegram.org

如果这个命令超时或者返回错误,说明你的代理虽然能通,但被Telegram屏蔽了IP,这种情况只能换代理。

5. 检查本地网络拦截

本地的杀毒软件、防火墙甚至VPN,都可能悄悄拦截Python的网络请求。可以暂时关闭这些工具,再跑代码试试,排除本地拦截的可能。


给你整理的完整修改版代码

结合了rdns=False和超时设置,还加了异常捕获方便排查:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession
from telethon.network.connection.tcpabridged import ConnectionTcpAbridged
from telethon import functions, types

api_id = 1234
api_hash = '12345'

proxy = {
    'proxy_type': 'socks5',
    'addr': '194.32.229.199',
    'port': 1050,
    'username': 'user',
    'password': 'pass',
    'rdns': False
}

try:
    with TelegramClient(
        StringSession(),
        api_id,
        api_hash,
        proxy=proxy,
        connection=ConnectionTcpAbridged,
        timeout=15
    ) as client:
        me = client.get_me()
        print("Успешная авторизация через прокси!")
        print(f"ID: {me.id}")
        print(f"Имя: {me.first_name}")
        print(f"Username: @{me.username}")
        print("\nСтрока сессии для повторного входа:")
        print(client.session.save())
except Exception as e:
    print(f"Ошибка подключения: {type(e).__name__}: {e}")

如果以上方法都不行,大概率是代理IP被Telegram的反爬机制限制了,换个代理IP或者端口试试吧。

内容来源于stack exchange

火山引擎 最新活动