使用Socks5代理请求Telegram出现SSLEOFError,求解决方案
解决使用Socks5代理请求Telegram时的SSL EOF异常
问题场景
编写了一个向Telegram发起请求的函数,设置Socks5代理后发起请求触发SSL异常。
原代码
def get_request_page(self, base_url: str = "https://t.me/", proxy_url=None): url = base_url + str(self.channel.username) if proxy_url is not None: proxy_info = { "http": proxy_url, "https": proxy_url } response = requests.get(url=url, proxies=proxy_info, verify=certifi_location) else: response = requests.get(url=url, verify=certifi_location) if response.status_code // 100 != 2: return "" soup = BeautifulSoup(response.content, 'html.parser') return soup.get_text()
报错信息
SOCKSHTTPSConnectionPool(host='t.me', port=443): Max retries exceeded with url: /solitude_comp_music (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)')))
解决方案
安装Socks代理依赖
requests本身不原生支持Socks5代理的HTTPS请求,需安装扩展包:pip install requests[socks]校验代理URL格式
Socks5代理的正确格式为:- 带认证:
socks5://user:password@host:port - 无认证:
socks5://host:port
确保proxy_url使用socks5://前缀,而非http/https。
- 带认证:
调整TLS版本或SSL验证策略
部分代理对TLS版本兼容性较差,可指定TLS版本;测试场景下可临时关闭SSL验证(生产环境禁止使用),修改后的代码示例:import ssl from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager from urllib3.util import ssl_ class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ctx = ssl_.create_urllib3_context(ssl.PROTOCOL_TLSv1_2) kwargs['ssl_context'] = ctx return super().init_poolmanager(*args, **kwargs) def get_request_page(self, base_url: str = "https://t.me/", proxy_url=None): url = base_url + str(self.channel.username) session = requests.Session() # 绑定指定TLS版本的适配器 session.mount('https://', TLSAdapter()) if proxy_url is not None: proxy_info = { "http": proxy_url, "https": proxy_url } session.proxies.update(proxy_info) try: response = session.get(url, verify=certifi_location) except requests.exceptions.SSLError: # 仅测试用,生产环境请勿关闭验证 response = session.get(url, verify=False) if response.status_code // 100 != 2: return "" soup = BeautifulSoup(response.content, 'html.parser') return soup.get_text()验证代理可用性
确认代理服务器正常运行,可通过其他工具测试代理能否正常访问Telegram服务,排除代理被屏蔽或网络波动的问题。
内容的提问来源于stack exchange,提问作者amir Reza Seddighin
相关产品推荐
相关产品推荐

