本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/128021167
分享下 在日常工作中 是如何使用requests来发请求的;
【实际这篇博客推迟发布N个月】
个人博客:https://blog.csdn.net/zyooooxie
【以下所有内容仅为个人项目经历,如有不同,纯属正常】
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: [email protected]
"""
import json
import time
import traceback
import random
import requests
import urllib3
from json import JSONDecodeError
from functools import wraps
from typing import Optional, Union, Dict, Callable
from requests_toolbelt.utils import dump
from urllib.parse import urljoin
from user_log import Log
# 测试环境 version
gl_version = '1.0'
gl_user_list = []
gl_header = {'version': gl_version, 'empUser': random.choice(gl_user_list), 'empRole': 'Admin'}
Log.info(gl_header)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def change_version(version: str):
"""
:param version:
:return:
"""
global gl_header
gl_header.update(version=version)
Log.error(gl_header)
def send_requests_retry(retry_times: int, sleep_time: int):
"""
请求重试
:param retry_times:重试次数
:param sleep_time:睡眠时间
:return:
"""
def decorator(func: Callable):
@wraps(func)
def inner(*args, **kwargs):
res = func(*args, **kwargs)
if not res:
Log.info('Response problem')
for rt in range(retry_times):
Log.info('retry {}; sleep {} seconds;'.format(rt + 1, sleep_time))
time.sleep(sleep_time)
res = func(*args, **kwargs)
if res:
return res
else:
Log.error('请留意:重试{}次,返回值一直有异常'.format(retry_times))
return False
# raise
else:
return res
return inner
return decorator
@send_requests_retry(retry_times=1, sleep_time=2)
def send_post_request_json(url: str, params_dict: dict, add_header: dict = None, **kwargs):
"""
发post请求-json格式
:param url:
:param params_dict:
:param add_header:
:return:
"""
header: Dict[str, str] = {'Content-Type': 'application/json;charset=utf-8'}
if add_header is not None:
header.update(add_header)
params_dict = json.dumps(params_dict, ensure_ascii=False).encode('utf8')
res = requests.post(url, data=params_dict, headers=header, verify=False, **kwargs)
Log.debug(dump.dump_all(res).decode('utf-8'))
try:
res_dict: dict = res.json()
# Log.info(res_dict)
return res_dict
except (JSONDecodeError, ConnectionResetError) as e:
Log.error(res.text)
Log.debug(e.args)
Log.info(traceback.format_exc())
return False
finally:
res.close()
def join_url(url: str):
"""
URL拼接
:param url:
:return:
"""
if url.find('xxx') != -1:
return url
base_url = 'https://blog.csdn.net/zyooooxie'
res = urljoin(base_url, url)
return res
if __name__ == '__main__':
Log.error('')
本文链接:https://blog.csdn.net/zyooooxie/article/details/128021167
个人博客 https://blog.csdn.net/zyooooxie