Skip to content

Commit b86642c

Browse files
josh-shaw-devJosh Shaw
andauthored
feat: custom session handler (#81)
Co-authored-by: Josh Shaw <josh.shaw@outlook.co.nz>
1 parent 7b9f02c commit b86642c

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

examples/custom_ssl_session.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from reolinkapi import Camera
2+
3+
import urllib3
4+
import requests
5+
from urllib3.util import create_urllib3_context
6+
7+
class CustomSSLContextHTTPAdapter(requests.adapters.HTTPAdapter):
8+
def __init__(self, ssl_context=None, **kwargs):
9+
self.ssl_context = ssl_context
10+
super().__init__(**kwargs)
11+
12+
def init_poolmanager(self, connections, maxsize, block=False):
13+
self.poolmanager = urllib3.poolmanager.PoolManager(
14+
num_pools=connections, maxsize=maxsize,
15+
block=block, ssl_context=self.ssl_context)
16+
17+
urllib3.disable_warnings()
18+
ctx = create_urllib3_context()
19+
ctx.load_default_certs()
20+
ctx.set_ciphers("AES128-GCM-SHA256")
21+
ctx.check_hostname = False
22+
23+
session = requests.session()
24+
session.adapters.pop("https://", None)
25+
session.mount("https://", CustomSSLContextHTTPAdapter(ctx))
26+
27+
## Add a custom http handler to add in different ciphers that may
28+
## not be aloud by default in openssl which urlib uses
29+
cam = Camera("url", "user", "password", https=True, session=session)
30+
cam.reboot_camera()

reolinkapi/handlers/api_handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def __init__(self, ip: str, username: str, password: str, https: bool = False, *
5858
self.username = username
5959
self.password = password
6060
Request.proxies = kwargs.get("proxy") # Defaults to None if key isn't found
61+
Request.session = kwargs.get("session") # Defaults to None if key isn't found
6162

6263
def login(self) -> bool:
6364
"""

reolinkapi/handlers/rest_handler.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@
44

55
class Request:
66
proxies = None
7+
session = None
8+
9+
@staticmethod
10+
def __getSession():
11+
reqHandler = requests
12+
if Request.session is not None:
13+
reqHandler = Request.session
14+
return reqHandler
715

816
@staticmethod
917
def post(url: str, data: List[Dict], params: Dict[str, Union[str, float]] = None) -> \
@@ -17,7 +25,7 @@ def post(url: str, data: List[Dict], params: Dict[str, Union[str, float]] = None
1725
"""
1826
try:
1927
headers = {'content-type': 'application/json'}
20-
r = requests.post(url, verify=False, params=params, json=data, headers=headers,
28+
r = Request.__getSession().post(url, verify=False, params=params, json=data, headers=headers,
2129
proxies=Request.proxies)
2230
if r.status_code == 200:
2331
return r
@@ -37,7 +45,7 @@ def get(url: str, params: Dict[str, Union[str, float]], timeout: float = 1) -> O
3745
:return:
3846
"""
3947
try:
40-
data = requests.get(url=url, verify=False, params=params, timeout=timeout, proxies=Request.proxies)
48+
data = Request.__getSession().get(url=url, verify=False, params=params, timeout=timeout, proxies=Request.proxies)
4149
return data
4250
except Exception as e:
4351
print("Get Error\n", e)

0 commit comments

Comments
 (0)