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

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值