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: 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

个人博客 https://blog.csdn.net/zyooooxie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值