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

使用Scrapy框架遇'dh key too small'错误,如何修改middlewares.py?

解决Scrapy中dh key too small的SSL错误

这个错误是因为目标服务器使用的DH密钥过小,不符合现代SSL安全标准,导致SSL握手失败。可以通过自定义下载中间件调整SSL上下文配置来解决,具体代码如下:

1. 在middlewares.py中添加以下代码

from scrapy.core.downloader.contextfactory import ScrapyClientContextFactory
from twisted.internet.ssl import optionsForClientTLS
from cryptography.hazmat.backends import default_backend

class CustomContextFactory(ScrapyClientContextFactory):
    def getContext(self, hostname=None, port=None):
        # 初始化客户端TLS选项
        ctx = optionsForClientTLS(
            hostname=hostname.decode("utf-8") if hostname else None,
            backend=default_backend()
        )
        # 降低SSL安全级别,允许使用弱DH密钥
        ctx.set_cipher_list('DEFAULT:@SECLEVEL=1')
        return ctx

class SSLFixMiddleware:
    def process_request(self, request, spider):
        # 为请求绑定自定义的SSL上下文工厂
        request.meta['context_factory'] = CustomContextFactory()

2. 在settings.py中启用中间件

找到DOWNLOADER_MIDDLEWARES配置项,添加自定义中间件(替换成你的项目实际名称):

DOWNLOADER_MIDDLEWARES = {
    'your_project_name.middlewares.SSLFixMiddleware': 543,
}

说明

  • DEFAULT:@SECLEVEL=1会降低SSL安全级别,允许使用较小的DH密钥,以此绕过握手限制。
  • 注意:该操作会降低请求的安全性,仅在目标服务器无法升级DH密钥的场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:54:57