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

Python 3.x爬虫遇HTTPSConnectionPool错误,求处理方案

我之前在做爬虫开发和邮箱验证功能时,多次碰到过这个requests.exceptions.ConnectionError错误,尤其是带着WinError 10060的连接超时问题,简直头大!不过摸清楚背后的原因后,这些问题都能逐一解决,下面分享我的实战经验:

核心原因拆解

这个错误本质是TCP连接超时+重试次数耗尽:WinError 10060是系统层面提示你,无法在规定时间内和目标服务器建立起连接;而Max retries exceeded则说明requests默认的重试机制已经用完了所有尝试机会。不管是爬虫还是邮箱验证,本质都是客户端和服务器的连接出了问题,解决思路大同小异。

实战解决办法

1. 调整超时时间与重试策略

默认的requests超时设置偏短,加上重试次数有限,很容易触发这个错误。你可以自定义重试规则,同时给连接留足缓冲时间:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# 创建会话对象,复用连接
session = requests.Session()
# 配置重试策略
retry_strategy = Retry(
    total=5,  # 最多重试5次
    backoff_factor=1,  # 重试间隔指数增长(1s→2s→4s...)
    status_forcelist=[429, 500, 502, 503, 504],  # 遇到这些服务器错误时重试
    allowed_methods=["HEAD", "GET", "OPTIONS"]  # 只对安全的请求方法重试
)
# 给HTTP/HTTPS请求挂载重试适配器
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("https://", adapter)
session.mount("http://", adapter)

try:
    # 设置10秒超时(连接超时+读取超时)
    response = session.get("你的目标URL", timeout=10)
    response.raise_for_status()  # 主动抛出HTTP错误
except requests.exceptions.ConnectionError as e:
    print(f"连接失败: {e}")

2. 检查网络与代理环境

  • 如果你在公司/学校内网,大概率是防火墙或代理拦截了请求,试试切换到个人热点,或者关闭系统代理再测试;
  • 如果目标网站有IP限流,就用代理IP绕过限制:
proxies = {
    "http": "http://你的代理IP:端口",
    "https": "https://你的代理IP:端口",
}
response = session.get("目标URL", proxies=proxies, timeout=10)

3. 伪装成真实浏览器请求

很多网站会拦截无浏览器标识的请求,你只需要添加几个关键请求头就行:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Referer": "https://www.google.com/"  # 可选,模拟从搜索引擎跳转
}
response = session.get("目标URL", headers=headers, timeout=10)

4. 邮箱验证场景的特殊处理

邮箱验证时出现这个错误,大多是邮件服务商的反限流机制在起作用:

  • 不要频繁发送验证请求,设置至少1分钟的间隔时间;
  • 像Gmail、Outlook这类服务商,需要使用应用专用密码代替普通密码登录SMTP服务器,记得去账户安全中心开启;
  • 更换SMTP端口试试,优先用加密端口:
import smtplib
from email.mime.text import MIMEText

msg = MIMEText("这是你的邮箱验证码:123456")
msg["Subject"] = "账户验证邮件"
msg["From"] = "你的邮箱@example.com"
msg["To"] = "用户邮箱@example.com"

try:
    # 使用TLS加密端口587
    server = smtplib.SMTP("smtp.example.com", 587)
    server.starttls()  # 启用加密连接
    server.login("你的邮箱@example.com", "应用专用密码")
    server.send_message(msg)
    server.quit()
except smtplib.SMTPConnectError as e:
    print(f"SMTP连接失败: {e}")

5. 先确认目标服务器状态

有时候不是你的问题,是目标网站/邮件服务器宕机了。先用curl命令测试一下:

curl -v https://你的目标URL

如果curl也访问失败,那就是服务器的问题,等一段时间再尝试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:34:23