Python接口调试,封装request的发送,json的处理,提取,修改

Python接口发送,封装request的发送,处理json的提取,修改.


觉得有用的小伙伴,可以点个赞,传递给更多有需要的人

分享一个自己封装的request的发送的方法,附请求示例

实现的效果

在这里插入图片描述

代码实例

def send_requests(method, url, request_data, headers=None):
    """
    :param method:
    :param url:
    :param request_data:
    :param headers:
    :return: 响应对象
    """
    print("发起HTTP请求")
    # 将请求数据转换成字典对象。
    print(f"请求头为:{headers}")
    print("请求方法为:{}".format(method))
    print("请求url为:{}".format(url))
    # 替换双引号是为了方便在第三方工具里校验数据
    request_data_info = str(request_data).replace("'", '"')
    print(f"请求数据为:{request_data_info}")
    method = str(method).lower()  # 小写处理
    if method == "get":
        # request_date为字典
        request_result = requests.get(url=url, params=request_data, headers=headers)
    elif method == "post_params":
        # 处理post不支持json的情况,request_date为字典
        request_result = requests.post(url=url, params=request_data, headers=headers)
    else:
        # post request_date为json
        request_result = requests.post(url=url, json=request_data, headers=headers)
    # 返回响应对象    
    return request_result

weather_api = {"method": "get",
               "url": "https://v0.yiketianqi.com/free/day",
               "params": {
                   "appid": "83791773",
                   "appsecret": "a8UpKWz2",
                   "city": "武汉"
               }}

print(send_requests(weather_api["method"], weather_api["url"], weather_api["params"]).json())

字符转json,dict转json,字符转dict

python使字符转dict

json_str = """{"appid": "83791773", "appsecret": "a8UpK23Wz2", "city": "武汉"}"""
# 符合条件的字符转dict
print(type(eval(json_str)))

python使dict转json

json_str = {"appid": "83791773", "appsecret": "a8UpK312Wz2", "city": "武汉"}
# dict转json
json_str = json.dumps(json_str)
print(json_str, type(json_str))

python使字符转json对象

# 字符转json对象
json_str = """{"appid": "83791773", "appsecret": "a8UpK213Wz2", "city": "武汉"}"""
json_str = json.loads(json_str)
print(json_str)

json通过key和key的索引(从0开始的自上而下的第几个key)获取key对应的value

前置条件: win cmd 安装依赖

pip install jsonpath

代码实例

jsonStr = {'nums': 2, 'cityid': '101200101', 'city': '武汉', 'date': '2022-06-30', 'week': '星期四',
           'update_time': '10:22',
           'wea': '晴', 'wea_img': 'qing', 'tem': '31', 'tem_day': '34', 'tem_night': '26', 'win': '东南风',
           'win_speed': '1级', 'win_meter': '5km/h', 'air': '82', 'pressure': '1001', 'humidity': '69%',
           "test1": {'city': '武汉2'}}


def jsonpath_match_by_key(json, key_name, index):
    """
    匹配json中所有的键值对,返回指定索引的key的value
    :param json: json
    :param key_name: key
    :param index: 索引
    :return:
    """
    bool_root_match = jsonpath.jsonpath(json, f"$.{key_name}")
    match_list = []
    if bool_root_match:
        match_list.append({key_name: bool_root_match[0]})
    match_list2 = jsonpath.jsonpath(json, f"$..[?(@.{key_name})]")
    if match_list2:
        match_list = match_list + match_list2
    return match_list[index].get(key_name)


print(jsonpath_match_by_key(jsonStr, "city", 1))

在这里插入图片描述

这里主要使用的jsonpath的过滤表达式实现,详情可以自行百度

json通过json路径修改json的值

前置条件: win cmd 安装依赖

pip install jsonpath_ng

代码示例

jsonStr = {'nums': 2, 'cityid': '101200101', 'city': '武汉', 'date': '2022-06-30', 'week': '星期四',
           'update_time': '10:22',
           'wea': '晴', 'wea_img': 'qing', 'tem': '31', 'tem_day': '34', 'tem_night': '26', 'win': '东南风',
           'win_speed': '1级', 'win_meter': '5km/h', 'air': '82', 'pressure': '1001', 'humidity': '69%',
           "test1": {'city': '武汉2'}}


def alter_by_jsonpath(json, json_path: str, alter_value):
    """根据jsonpath匹配并修改json的值"""
    jsonpath_expr = parse(json_path)
    jsonpath_expr.find(json)
    jsonpath_expr.update(json, alter_value)
    return json


print(alter_by_jsonpath(jsonStr, "$.test1.city", "*****AAA******"))

在这里插入图片描述

eval函数无法使json字符转换为dict的解决方案

json的字符串无法使用eval转dict,一般是因为json中有几个特殊的值false,true,null
而在python中这几个都是大写的,null对应的是None

json_str = """{"appid": false, "appsecret": true, "city": null}"""


def handle_string_fit_eval(string) -> str:
    """
    处理json字符使满足eval()
    :param string:
    :return:
    """
    return str(string).replace('false', 'False').replace('true', 'True').replace(
        'null', 'None')


sss = eval(handle_string_fit_eval(json_str))
print(sss)
print(type(sss))

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franciz小测测

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值