首页 > 其他分享 >22.多协议封装设计

22.多协议封装设计

时间:2024-01-17 18:55:45浏览次数:27  
标签:xml 协议 封装 22 res 响应 json dict participant

多协议封装应用场景

 
  • 问题:
    • 响应值不统一
      • json
      • xml
    • 断言比较困难

解决方案:获得的响应信息全部转换为结构化的数据进行处理

解决方案

 


participant 请求 as req
participant 响应 as res
participant xml_响应 as xml_res
participant 其他格式的响应 as json_res
scale 800

req -> res: 发起请求获取响应
res -> xml_res: 获得xml响应
res -> json_res: 获得其他响应
xml_res -> 断言: 使用xml断言方式断言
json_res -> 断言: 使用其他断言方式断言
participant 请求 as req
participant 响应 as res
participant xml_响应 as xml_res
participant 其他格式响应 as json_res
scale 800

req -> res: 发起请求获取响应
res -> xml_res: 获得xml响应
res -> json_res: 获得其他格式响应
xml_res -> json: 转换成json格式
json_res -> json: 转换成json格式
json -> 断言: 完成断言

实战演示

 

实战目标: 对响应值做二次封装,可以使用统一提取方式完成断言

xml 转换 dict(Python)

 
  • 环境准备: pip install xmltodict
  • 依赖包版本: 0.13
import json
import xmltodict
import requests

def test_xml_res():
    """
    xml转换为json
    :return:
    """
    res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    dict_res = xmltodict.parse(res.text)

多协议封装(Python)

 
def response_to_dict(response: Response):
    """
    获取 Response对象,将多种响应格式统一转换为dict
    :param response:
    :return:
    """
    res_text = response.text
    if res_text.startswith("<?xml"):
        final_res = xmltodict.parse(res_text)
    else:
        final_res = response.json()
    return final_res
# 测试响应是否可以转换为dict
def test_response_to_dict():
    """
    xml转换为json
    :return:
    """
    # res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    res = requests.get("https://httpbin.ceshiren.com/get")
    r = response_to_dict(res)
    assert isinstance(r, dict)

标签:xml,协议,封装,22,res,响应,json,dict,participant
From: https://www.cnblogs.com/csfsz/p/17970786

相关文章

  • 22. 从零用Rust编写正反向代理,一个数据包的神奇HTTP历险记!
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy数......
  • 洛谷 P8426 [JOI Open 2022] 放学路(School Road)
    洛谷传送门LOJ传送门考虑整个图是一个点双怎么做。显然如果有重边并且两条边边权一样就寄了。否则我们可以把它们当成一条边。考虑一个二度点\(u\)和与它相连的边\((v,u),(u,w)\)。我们可以把它缩成边\((v,w)\)。如果新边已经存在并且边权不等于这两条边边权就寄了。......
  • CCPC 2022 Guilin
    https://qoj.ac/contest/1303ALily直接做即可。BCodeWithNoForces考虑状压DP:\(f(S,T,R)\)表示对于每个人,时间是否达到要求的状态压缩为\(S\),空间是否达到要求的状态压缩为\(T\),运行结果是否达到要求的状态压缩为\(R\),转移直接枚举下一个跑的测试点即可。CArrayCo......
  • P2216 [HAOI2007] 理想的正方形 题解
    题目链接:理想的正方形比较明显的,我们可以用二维ST表解决,具体的二维ST表的实现,只需要知道一点:对于\(st[i][j][t]=max(i\simi+2^t,j\simj+2^t)\),表示的是如图所示的大正方形范围内的最值,它可以拆成从四个小正方形的左端点走\(2^{t-1}\)长的小正方形组成,预处理完直接查......
  • ubuntu22.04回退系统内核
    开机之后突然发现nvidia-smi检查不到驱动了,发现因为内核自动更新导致的,这里介绍一下内核回退的方法。第一步:查看当前内核版本uname-a我的当前内核版本是:6.5.0-14-generic第二步:查看系统现存的内存版本grepmenuentry/boot/grub/grub.cfg我的系统存在两个内核版本:6.5.0-14-......
  • git pull 报错:ssh: connect to host github.com port 22: Connection timed out
    在执行gitpull时提示错误:ssh:connecttohostgithub.comport22:Connectiontimedout解决方案:添加config文件vim~/.ssh/config添加如下内容Hostgithub.comHostnamessh.github.comPort443ssh:connecttohostgithub.comport22:Connectionti......
  • [JOISC2022] 团队竞技
    分析首先这道题本质上离不开一个思想,就是我们贪心地选择最大的\(a_i+b_j+c_k\)的\(i,j,k\),但是碍于题目的限制,外加观察样例会发现有一些人是永远不可能选择的,例如样例\(1\)中的第\(3\)人,他的\(b_i,c_i\)都是最大的,不管剩余\(2\)人如何选,总是不满足题意。因此,如果某个......
  • 网络编程之TCP协议的三次握手和四次挥手
    引言见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。面试官:然后呢?求职者:这就是三次......
  • 网络编程之基于TCP协议的socket套接字编程
    基于TCP的套接字【1】方法简介tcp是基于链接的必须先启动服务端然后再启动客户端去链接服务端tcp服务端server=socket()#创建服务器套接字server.bind()#把地址绑定到套接字server.listen()#监听链接inf_loop:#服务器无限循环conn=serv......
  • 网络编程之基于UDP协议的socket套接字编程
    基于UDP的套接字udp是无链接的,先启动哪一端都不会报错【1】方法简介(1)UDP服务端server=socket()#创建一个服务器的套接字server.bind()#绑定服务器套接字inf_loop:#服务器无限循环conn=server.recvfrom()/conn.sendto()#对话(接收与发送)serv......