从0开始python学习-42.requsts统一请求封装

统一请求封装的目的:

1.去除重复的冗余的代码

2. 跨py文件实现通过一个sess来自动关联有cookie关联的接口。

3. 设置统一的公共参数,统一的文件处理,统一的异常处理,统一的日志监控,统一的用例校验等

封装前原本代码:

py文件一:

class TestShop:session = requests.session()def test_start_list(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'application':'app','application_client_type':'h5','s':'index/index'}res = TestShop.session.request(method=method,url=url,params=params)print(res.json())def test_product_detail(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'application':'app','application_client_type':'h5','s':'goods/detail'}json = {"goods_id": "12"}res = TestShop.session.request(method=method,url=url,params=params,json=json)print(res.json())

py文件二:

class TestApi:access_token = ''session = requests.session()  def test_phpwind(self):url = 'http://47.107.116.139/phpwind/'res = TestApi.session.request(method="get",url=url)res_token = re.search('name="access_token" value="(.*?)"',res.text)TestApi.access_token = access_token.group(1)print(TestApi.access_token)def test_file_upload(self):url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'params = {'access_token':TestApi.access_token}# 封装前文件上传file = {'media':open('D:\\1.jpg','rb')}res = RequestUtil().send_request(method="post", url=url, params=params, files=file)print(res.json())

从这两个代码可以看出,两个py文件都创建了session回话,且在第一个py文件中有params的冗余部分,则可以将请求统一封装到一个session进行调用,去除的冗余的同时,若params内容需要修改也只用修改一个即可,并且将文件上传进行封装后代码中只需要上传文件路径即可

虽然在公共参数中的public_params只作用于一个py文件,但是对于另外一个文件虽然多余了但是不会产生影响

统一封装请求:

class RequestUtil:session = requests.session()def send_request(self,**kwargs):# 公共参数public_params = {'application': 'app','application_client_type': 'h5'}for key,value in kwargs.items():if key == "params":kwargs['params'].update(public_params)if key =='files':# 此时请求接口中的file的值为value.items(),可能会有多个文件,所以是一个列表for file_key,file_value in value.items():# 文件上传中的key则为value[file_key],value为file_valuevalue[file_key] = open(file_value,'rb')# 公共请求res = RequestUtil.session.request(**kwargs)return res

修改后代码一:

class TestShop:token = ''#首页列表接口def test_start_list(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'s':'index/index'}res = RequestUtil().send_request(method=method,url=url,params=params)print(res.json())# 商品列表接口def test_product_detail(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'s':'goods/detail'}json = {"goods_id": "12"}res = RequestUtil().send_request(method=method,url=url,params=params,json=json)print(res.json())

修改后代码二:

class TestApi:access_token = ''def test_phpwind(self):url = 'http://47.107.116.139/phpwind/'res = RequestUtil().send_request(method="get",url=url)# print(res.text)# 因为token是在文本中,通过正则表达式的方式获取tokenaccess_token = re.search('name="access_token" value="(.*?)"',res.text)TestApi.access_token = res_token.group(1)print(TestApi.csrf_token)def test_file_upload(self):url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'params = {'access_token':TestApi.access_token}# 封装后文件上传,只需要写入路径file = {'media':'D:\\1.jpg'}res = RequestUtil().send_request(method="post", url=url, params=params, files=file)print(res.json())

 文件上传封装:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326337.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乐理燥废笔记

乐理燥废笔记 文章目录 终止式小调音阶转调不协和和弦进行大小转调1251 1451转调我的霹雳猫阿诺三全音代理五声音阶又怎样和弦附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换…

静态网页设计——旅游网(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1KN4y1v7jx/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

在电商狂欢中,什么平台更加对商家有利?

我是电商珠珠 近年来,不管是直播电商也好,电商平台也好,都一直朝着向上走的趋势。 我做电商也已经有5年时间了,期间做过天猫,快手、抖店,团队从原来的几个人,扩大到了70。 在22年10月&#x…

RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

先决条件# Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客CLI 工具Ingress Controller(仅适用于托管 Kubernetes) 创建集群k8s [rootnginx locale]# cat rancher-cluster.yml nodes:- …

JMS消息发送

目录 概述1.搭建 JMS 环境2.使用JmsTemplate 发送消息3.接收JMS 消息 概述 JMS是一个Java标准,定义了使用消息代理(message broker)的通用API,在2001年提出。长期以来,JMS一直是Java 中实现异步消息的首选方案。在JMS 出现之前每个消息代理都有其私有的…

微服务注册中的负载均衡

背景 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。…

一文讲透Python数据分析可视化之直方图(柱状图)

直方图(Histogram)又称柱状图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。通过绘制直方图可以较为直观地传递有关数据的变化信息,使…

Zoho SalesIQ:构建客户服务知识库的实用工具与指南

客服人员每天都有很多事情要做,包括在线聊天、音频通话、屏幕共享和发送电子邮件。为什么要将搜索常用信息添加到他们列表中呢?因为客户在遇到问题的同时想快速解决问题。所以,我们要使用Zoho SalesIQ客服系统构建客户服务知识库。 一、什么…

密码学:一文看懂初等数据加密一对称加密算法

文章目录 对称加密算法简述对称加密算法的由来对称加密算法的家谱数据加密标准-DES简述DES算法的消息传递模型DES算法的消息传递过程和Base64算法的消息传递模型的区别 算法的实现三重DES-DESede三重DES-DESede实现 高级数据加密标准一AES实现 国际数据加密标准-IDEA实现 基于口…

实战干货:用 Python 批量下载百度图片!

为了做一个图像分类的小项目,需要制作自己的数据集。要想制作数据集,就得从网上下载大量的图片,再统一处理。 这时,一张张的保存下载,就显得很繁琐。那么,有没有一种方法可以把搜索到的图片直接下载到本地电…

指定linux文件夹下所有文件赋权命令“chmod -R 755”

仓库:Ai-trainee/GPT-Prompts-Hub 下面我们假设要为:/opt/robot/lib/robot_control/下所有子文件赋权 如果要为 robot_control 目录中的所有文件分配权限(在 Linux 术语中也称为“更改文件权限”或“chmod”),则可以…

HTML的简单介绍

文章目录 1. HTML1.1 HTML 基础认识1.2 快速生成代码框架1.3 HTML 基础标签 1. HTML 1.1 HTML 基础认识 什么是HTML呢? HTML叫做超文本标记语言。超文本:例如图片,视频,文本,声音,表格,链接等…