Python脚本之requests发请求

本文为博主原创,未经授权,严禁转载及使用。
本文链接: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

你可能感兴趣的:(接口测试,python,requests)