You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS(M2)下Python请求https://api.telegram.org/速度异常缓慢排查

问题:MacBook Pro M2上Python requests请求https://api.telegram.org/耗时异常漫长

环境信息

  • macOS系统版本:
% sw_vers
ProductName:        macOS
ProductVersion:     13.3.1
ProductVersionExtra:    (a)
BuildVersion:       22E772610a
  • Python版本:Python 3.11.3

测试脚本

requests测试脚本 (requests_test.py)

import time
import requests

start = time.time()
response = requests.get('https://api.telegram.org/')
print('Time:', time.time() - start)

httpx测试脚本 (httpx_test.py)

import time
import httpx

start = time.time()
response = httpx.get('https://api.telegram.org/')
print('Time:', time.time() - start)

测试结果

  • 主机本地环境:
    • requests脚本耗时:约151.99秒
    • httpx脚本耗时:约5.84秒
  • Docker容器内:
    • requests脚本耗时:约1.32秒
    • httpx脚本耗时:约1.04秒
  • curl命令请求耗时:约1.92秒

核心现象:仅针对api.telegram.org域名出现该问题,更换Python版本后无改善。

排查方案与解决办法

1. 强制指定DNS服务器

requests依赖的urllib3在部分macOS环境下对境外域名的DNS解析存在延迟,手动指定公共DNS可解决:

import time
import requests
import socket
from urllib3.util.connection import create_connection

def use_custom_dns(dns_servers):
    def patched_conn(address, *args, **kwargs):
        host, port = address
        for dns in dns_servers:
            try:
                ip = socket.gethostbyname_ex(host)[2][0]
                return create_connection((ip, port), *args, **kwargs)
            except socket.gaierror:
                continue
        raise socket.gaierror("DNS resolution failed")
    socket.create_connection = patched_conn

# 配置谷歌公共DNS
use_custom_dns(['8.8.8.8', '8.8.4.4'])

start = time.time()
resp = requests.get('https://api.telegram.org/')
print('耗时:', time.time() - start)

2. 调整SSL/TLS配置

requests默认SSL后端与httpx、curl存在差异,尝试强制使用系统SSL库:

import time
import requests
import ssl

ssl_ctx = ssl.create_default_context()
ssl_ctx.set_default_verify_paths()

start = time.time()
resp = requests.get('https://api.telegram.org/', verify=ssl_ctx)
print('耗时:', time.time() - start)

注意:测试阶段可临时关闭证书验证(verify=False)确认是否为证书问题,但生产环境禁止使用。

3. 禁用代理

macOS系统代理可能被requests异常加载,导致走无效代理路径,明确禁用代理:

import time
import requests

start = time.time()
resp = requests.get('https://api.telegram.org/', proxies={'http': None, 'https': None})
print('耗时:', time.time() - start)

4. 更新依赖库

requests依赖的urllib3旧版本可能存在连接池或握手bug,执行以下命令更新:

pip install --upgrade urllib3 requests

内容的提问来源于stack exchange,提问作者qmessagebox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:10:35