1- from typing import Optional
1+ from typing import Any , Dict , Optional , Union
22
33import requests
4+ from requests_toolbelt .multipart .encoder import MultipartEncoder # type: ignore
45
56
67class RequestsBackend :
@@ -10,3 +11,43 @@ def __init__(self, session: Optional[requests.Session] = None) -> None:
1011@property
1112def client (self )-> requests .Session :
1213return self ._client
14+
15+ def http_request (
16+ self ,
17+ method :str ,
18+ url :str ,
19+ json :Optional [Union [Dict [str ,Any ],bytes ]]= None ,
20+ data :Optional [Union [Dict [str ,Any ],MultipartEncoder ]]= None ,
21+ params :Optional [Any ]= None ,
22+ timeout :Optional [float ]= None ,
23+ verify :Optional [Union [bool ,str ]]= True ,
24+ stream :Optional [bool ]= False ,
25+ ** kwargs :Any
26+ )-> requests .Response :
27+ """Make HTTP request
28+
29+ Args:
30+ method: The HTTP method to call ('get', 'post', 'put', 'delete', etc.)
31+ url: The full URL
32+ data: The data to send to the server in the body of the request
33+ json: Data to send in the body in json by default
34+ timeout: The timeout, in seconds, for the request
35+ verify: Whether SSL certificates should be validated. If
36+ the value is a string, it is the path to a CA file used for
37+ certificate validation.
38+ stream: Whether the data should be streamed
39+
40+ Returns:
41+ A requests Response object.
42+ """
43+ return self ._client .request (
44+ method = method ,
45+ url = url ,
46+ params = params ,
47+ data = data ,
48+ timeout = timeout ,
49+ stream = stream ,
50+ verify = verify ,
51+ json = json ,
52+ ** kwargs
53+ )