使用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
相关产品推荐
相关产品推荐

