Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ssl
- import requests
- from urllib3.poolmanager import PoolManager
- from requests.adapters import HTTPAdapter
- class SSLAdapter(HTTPAdapter):
- """Adapter that uses a custom SSL context with session tickets enabled."""
- def __init__(self, *args, **kwargs):
- self.ssl_context = self.make_ssl_context()
- super().__init__(*args, **kwargs)
- @staticmethod
- def make_ssl_context():
- ctx = ssl.create_default_context()
- # Enable session tickets (extension 35) for Cloudflare
- if hasattr(ssl, "OP_NO_TICKET"):
- ctx.options &= ~ssl.OP_NO_TICKET
- return ctx
- def init_poolmanager(self, *args, **kwargs):
- kwargs['ssl_context'] = self.ssl_context
- self.poolmanager = PoolManager(*args, **kwargs)
- def proxy_manager_for(self, *args, **kwargs):
- kwargs['ssl_context'] = self.ssl_context
- return super().proxy_manager_for(*args, **kwargs)
- # --- Apply globally ---
- def patch_requests():
- """Globally patch requests to use our custom SSL context."""
- print("inside patch_requests")
- adapter = SSLAdapter()
- session = requests.Session()
- session.mount("https://", adapter)
- session.mount("http://", adapter)
- # Monkey-patch the global API functions (get, post, etc.)
- requests.Session = lambda: session
- requests.request = session.request
- requests.get = session.get
- requests.post = session.post
- requests.put = session.put
- requests.delete = session.delete
- requests.head = session.head
- requests.options = session.options
- requests.patch = session.patch
- return session
Add Comment
Please, Sign In to add comment