From 337b9793817c9f3e72b0453c8fe839d76d852147 Mon Sep 17 00:00:00 2001 From: Brenda Solari Date: Fri, 3 Oct 2025 17:19:28 -0500 Subject: [PATCH] Add context factory middleware --- src/ps_helper/middlewares/README.md | 18 ++++++++++++++++++ src/ps_helper/middlewares/__init__.py | 0 src/ps_helper/middlewares/context_factory.py | 10 ++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/ps_helper/middlewares/README.md create mode 100644 src/ps_helper/middlewares/__init__.py create mode 100644 src/ps_helper/middlewares/context_factory.py 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