本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/128021167
分享下 在日常工作中 是如何使用requests来发请求的;
【实际这篇博客推迟发布N个月】
个人博客:https://blog.csdn.net/zyooooxie
【以下所有内容仅为个人项目经历,如有不同,纯属正常】
代码
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""
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