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

Python requests抓取clasificadosonline.com遇SSL握手失败错误原因排查

SSL握手失败错误原因分析

错误原因拆解

从报错SSLV3_ALERT_HANDSHAKE_FAILURE来看,核心是你的请求和目标服务器的SSL/TLS握手流程无法完成,常见原因有以下几点:

  • 协议版本不兼容:目标服务器可能禁用了SSLv3、TLS 1.0这类旧版协议,仅支持TLS 1.2或更高版本,但requests默认的协议范围包含这些旧版本,被服务器直接拒绝。
  • 加密套件不匹配:服务器要求的加密套件和requests默认使用的加密套件没有交集,握手时无法协商出双方都认可的加密方式,导致失败。
  • 证书验证问题:虽然报错指向握手,但也可能是服务器证书未被本地信任(比如自签名证书、过期证书),不过这种情况通常会有更明确的证书错误提示,优先级低于前两点。

解决办法

针对上述原因,可以通过以下方式调整请求配置:

1. 指定支持的TLS版本

强制请求使用服务器兼容的TLS版本,比如TLS 1.2或1.3,示例代码如下:

import requests
import ssl
from requests.adapters import HTTPAdapter
from urllib3.util.ssl_ import create_urllib3_context

class TLS12Adapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        # 强制使用TLS 1.2
        ctx = create_urllib3_context(ssl_version=ssl.PROTOCOL_TLSv1_2)
        kwargs['ssl_context'] = ctx
        return super().init_poolmanager(*args, **kwargs)

url = 'https://clasificadosonline.com/'

try:
    session = requests.Session()
    # 将适配器挂载到HTTPS请求
    session.mount('https://', TLS12Adapter())
    response = session.get(url)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

2. 匹配服务器要求的加密套件

如果是加密套件不匹配,可以先查询目标服务器支持的加密套件,再在代码中指定:

# 在上文的TLSAdapter类中修改加密套件配置
ctx.set_ciphers('ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256')

3. 临时关闭证书验证(不推荐用于生产环境)

如果是证书信任问题,可临时关闭验证测试,但这会带来安全风险:

response = requests.get(url, verify=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:35:59