【问题标题】:Disable SSL certificate verification in Scrapy在 Scrapy 中禁用 SSL 证书验证
【问题描述】:
我在使用 Scrapy 时,每当我使用 Scrapy 抓取证书的 CN 值与服务器域名匹配的 HTTPS 站点时,Scrapy 都非常好用!但另一方面,每当我尝试抓取证书的 CN 值与服务器域名不匹配的站点时,我都会得到以下信息:
我查看了尽可能多的文档,据我所知,Scrapy 没有办法禁用 SSL 证书验证。甚至 Scrapy Request 对象的文档(我认为这是此功能所在的位置)也没有参考:
http://doc.scrapy.org/en/1.0/topics/request-response.html#scrapy.http.Request https://github.com/scrapy/scrapy/blob/master/scrapy/http/request/init.py
也没有解决问题的 Scrapy 设置:
http://doc.scrapy.org/en/1.0/topics/settings.html
缺少按源使用 Scrapy 并根据需要修改源。
【问题讨论】:
从文档中看,您可以修改 DOWNLOAD_HANDLERS 或 DOWNLOAD_HANDLERS_BASE 设置以更改 scrapy 处理 https 的方式。从那里您可能必须创建自己的修改后的HttpDownloadHandler,以克服您收到的错误。
/me 头靠在桌子上。这当然看起来很有希望。您能否将其写成答案以便我接受,然后添加我用于其他人的代码以供将来参考?
【解决方案1】:
根据您为the settings 链接的文档,您似乎可以修改DOWNLOAD_HANDLERS 设置。
来自文档:
"""
A dict containing the request download handlers enabled by default in
Scrapy. You should never modify this setting in your project, modify
DOWNLOAD_HANDLERS instead.
"""
DOWNLOAD_HANDLERS_BASE = {
'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler'}
然后在您的设置中,如下所示:
"""
Configure your download handlers with something custom to override
the default https handler
"""
DOWNLOAD_HANDLERS = {'https': 'my.custom.downloader.handler.https.HttpsDownloaderIgnoreCNError'}
因此,通过为https 协议定义一个自定义处理程序,您应该能够处理您遇到的错误并允许scrapy 继续其业务。可以专门解决我遇到的问题。