Это не совсем ответ на ваш вопрос, но слишком длинный для комментария. Мне проще НЕ иметь дело с одноразовыми сертификатами, такими как самоподписанные сертификаты или сертификаты для локальных / частных серверов. Я добился успеха с чем-то вроде этого (взято из проекта treq
, но должно работать и для scrapy
, с некоторыми настройками):
import re
from twisted.internet import ssl
from twisted.web.iweb import IPolicyForHTTPS
from twisted.web.client import BrowserLikePolicyForHTTPS, Agent
from zope.interface import implementer
@implementer(IPolicyForHTTPS)
class RegexContextFactory:
defaultPolicy = BrowserLikePolicyForHTTPS()
def __init__(self, re_domains):
self.re_domains = re.compile(re_domains)
def creatorForNetloc(self, hostname, port):
if self.re_domains.match(hostname) != None:
return ssl.CertificateOptions(verify=False)
return self.defaultPolicy.creatorForNetloc(hostname, port)
# Replace regex with one that will match your private domains
regex_factory = RegexContextFactory(b"^(dev|test|stage)-api\.private.net")
RegexContextFactory
принимает регулярное выражение (убедитесь, что это bytes
тип) и игнорирует меры безопасности для всех URL-адресов TLS, соответствующих регулярному выражению. Все остальные URL-адреса работают по умолчанию.