refactor RequestUtils

This commit is contained in:
InfinityPacer
2024-06-19 13:45:02 +08:00
parent f902f43c56
commit de2323d67a

View File

@ -48,128 +48,159 @@ class RequestUtils:
if timeout:
self._timeout = timeout
def post(self, url: str, data: Any = None, json: dict = None) -> Optional[Response]:
def request(self, method: str, url: str, raise_exception: bool = False, **kwargs) -> Optional[Response]:
"""
发起HTTP请求
:param method: HTTP方法如 get, post, put 等
:param url: 请求的URL
:param raise_exception: 是否在发生异常时抛出异常否则默认拦截异常返回None
:param kwargs: 其他请求参数如headers, cookies, proxies等
:return: HTTP响应对象
:raises: requests.exceptions.RequestException 仅raise_exception为True时会抛出
"""
if self._session is None:
req_method = requests.request
else:
req_method = self._session.request
kwargs.setdefault("headers", self._headers)
kwargs.setdefault("cookies", self._cookies)
kwargs.setdefault("proxies", self._proxies)
kwargs.setdefault("timeout", self._timeout)
kwargs.setdefault("verify", False)
kwargs.setdefault("stream", False)
try:
return req_method(method, url, **kwargs)
except requests.exceptions.RequestException:
if raise_exception:
raise
return None
def get(self, url: str, params: dict = None, **kwargs) -> Optional[str]:
"""
发送GET请求
:param url: 请求的URL
:param params: 请求的参数
:param kwargs: 其他请求参数如headers, cookies, proxies等
:return: 响应的内容若发生RequestException则返回None
"""
response = self.request(method="get", url=url, params=params, **kwargs)
return str(response.content, "utf-8") if response else None
def post(self, url: str, data: Any = None, json: dict = None, **kwargs) -> Optional[Response]:
"""
发送POST请求
:param url: 请求的URL
:param data: 请求的数据,表单格式
:param json: 请求的JSON数据
:param kwargs: 其他请求参数如headers, cookies, proxies等
:return: HTTP响应对象若发生RequestException则返回None
"""
if json is None:
json = {}
try:
if self._session:
return self._session.post(url,
data=data,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
json=json,
stream=False)
else:
return requests.post(url,
data=data,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
json=json,
stream=False)
except requests.exceptions.RequestException:
return None
return self.request(method="post", url=url, data=data, json=json, **kwargs)
def get(self, url: str, params: dict = None) -> Optional[str]:
try:
if self._session:
r = self._session.get(url,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
params=params)
else:
r = requests.get(url,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
params=params)
return str(r.content, 'utf-8')
except requests.exceptions.RequestException:
return None
def put(self, url: str, data: Any = None, **kwargs) -> Optional[Response]:
"""
发送PUT请求
:param url: 请求的URL
:param data: 请求的数据,表单格式
:param kwargs: 其他请求参数如headers, cookies, proxies等
:return: HTTP响应对象若发生RequestException则返回None
"""
return self.request(method="put", url=url, data=data, **kwargs)
def get_res(self, url: str,
def get_res(self,
url: str,
params: dict = None,
data: Any = None,
json: dict = None,
allow_redirects: bool = True,
raise_exception: bool = False
) -> Optional[Response]:
try:
if self._session:
return self._session.get(url,
params=params,
data=data,
json=json,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
allow_redirects=allow_redirects,
stream=False)
else:
return requests.get(url,
params=params,
data=data,
json=json,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
allow_redirects=allow_redirects,
stream=False)
except requests.exceptions.RequestException:
if raise_exception:
raise requests.exceptions.RequestException
return None
raise_exception: bool = False,
**kwargs) -> Optional[Response]:
"""
发送GET请求并返回响应对象
:param url: 请求的URL
:param params: 请求的参数
:param data: 请求的数据,表单格式
:param json: 请求的JSON数据
:param allow_redirects: 是否允许重定向
:param raise_exception: 是否在发生异常时抛出异常否则默认拦截异常返回None
:param kwargs: 其他请求参数如headers, cookies, proxies
:return: HTTP响应对象若发生RequestException则返回None
:raises: requests.exceptions.RequestException 仅raise_exception为True时会抛出
"""
return self.request(method="get",
url=url,
params=params,
data=data,
json=json,
allow_redirects=allow_redirects,
raise_exception=raise_exception,
**kwargs)
def post_res(self, url: str, data: Any = None, params: dict = None,
def post_res(self,
url: str,
data: Any = None,
params: dict = None,
allow_redirects: bool = True,
files: Any = None,
json: dict = None,
raise_exception: bool = False) -> Optional[Response]:
try:
if self._session:
return self._session.post(url,
data=data,
params=params,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
allow_redirects=allow_redirects,
files=files,
json=json,
stream=False)
else:
return requests.post(url,
data=data,
params=params,
verify=False,
headers=self._headers,
proxies=self._proxies,
cookies=self._cookies,
timeout=self._timeout,
allow_redirects=allow_redirects,
files=files,
json=json,
stream=False)
except requests.exceptions.RequestException:
if raise_exception:
raise requests.exceptions.RequestException
return None
raise_exception: bool = False,
**kwargs) -> Optional[Response]:
"""
发送POST请求并返回响应对象
:param url: 请求的URL
:param data: 请求的数据,表单格式
:param params: 请求的参数
:param allow_redirects: 是否允许重定向
:param files: 请求的文件
:param json: 请求的JSON数据
:param kwargs: 其他请求参数如headers, cookies, proxies等
:param raise_exception: 是否在发生异常时抛出异常否则默认拦截异常返回None
:return: HTTP响应对象若发生RequestException则返回None
:raises: requests.exceptions.RequestException 仅raise_exception为True时会抛出
"""
return self.request(method="post",
url=url,
data=data,
params=params,
allow_redirects=allow_redirects,
files=files,
json=json,
raise_exception=raise_exception,
**kwargs)
def put_res(self,
url: str,
data: Any = None,
params: dict = None,
allow_redirects: bool = True,
files: Any = None,
json: dict = None,
raise_exception: bool = False,
**kwargs) -> Optional[Response]:
"""
发送PUT请求并返回响应对象
:param url: 请求的URL
:param data: 请求的数据,表单格式
:param params: 请求的参数
:param allow_redirects: 是否允许重定向
:param files: 请求的文件
:param json: 请求的JSON数据
:param raise_exception: 是否在发生异常时抛出异常否则默认拦截异常返回None
:param kwargs: 其他请求参数如headers, cookies, proxies等
:return: HTTP响应对象若发生RequestException则返回None
:raises: requests.exceptions.RequestException 仅raise_exception为True时会抛出
"""
return self.request(method="put",
url=url,
data=data,
params=params,
allow_redirects=allow_redirects,
files=files,
json=json,
raise_exception=raise_exception,
**kwargs)
@staticmethod
def cookie_parse(cookies_str: str, array: bool = False) -> Union[list, dict]:
@ -182,15 +213,12 @@ class RequestUtils:
if not cookies_str:
return {}
cookie_dict = {}
cookies = cookies_str.split(';')
cookies = cookies_str.split(";")
for cookie in cookies:
cstr = cookie.split('=')
cstr = cookie.split("=")
if len(cstr) > 1:
cookie_dict[cstr[0].strip()] = cstr[1].strip()
if array:
cookiesList = []
for cookieName, cookieValue in cookie_dict.items():
cookies = {'name': cookieName, 'value': cookieValue}
cookiesList.append(cookies)
return cookiesList
return [{"name": k, "value": v} for k, v in cookie_dict.items()]
return cookie_dict