diff --git a/src/ps_helper/middlewares/README.md b/src/ps_helper/middlewares/README.md new file mode 100644 index 0000000..3f314ce --- /dev/null +++ b/src/ps_helper/middlewares/README.md @@ -0,0 +1,18 @@ +# LegacyConnectContextFactory + +This middleware provides a custom `ClientContextFactory` for **Scrapy** to fix the SSL error: + +`SSL routines: unsafe legacy renegotiation disabled error` + +--- + +## Installation + +Place the extension in your Scrapy project and enable it in `settings.py`: + +```python +DOWNLOADER_CLIENTCONTEXTFACTORY = "ps_helper.middlewares.LegacyConnectContextFactory" +``` +Scrapy will then use the LegacyConnectContextFactory for all HTTPS connections. + +-------------------------------------- diff --git a/src/ps_helper/middlewares/__init__.py b/src/ps_helper/middlewares/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ps_helper/middlewares/context_factory.py b/src/ps_helper/middlewares/context_factory.py new file mode 100644 index 0000000..6e949e4 --- /dev/null +++ b/src/ps_helper/middlewares/context_factory.py @@ -0,0 +1,10 @@ +from scrapy.core.downloader.contextfactory import ScrapyClientContextFactory + + +class LegacyConnectContextFactory(ScrapyClientContextFactory): + """Solve SSL routines unsafe legacy renegotiation disabled error.""" + + def getContext(self, hostname=None, port=None): + ctx = self.getCertificateOptions().getContext() + ctx.set_options(0x4) + return ctx