首页 > 编程语言 >python之requests库详解

python之requests库详解

时间:2023-06-09 23:33:25浏览次数:40  
标签:python res json url token 详解 requests data

1.requests库详解

发送http请求,接受http响应的库

安装:pip install requests

1.1 常用方法

requests.get()--->def get(url,params=None,**kwargs) #发送get请求
url:接口请求地址
params:是get请求用于传参,这个参数会自动以?的方式加到url之后,多个参数之间用&分割
**kwargs:可变长度的字典参数

requests.post()--->def post(url, data=None, json=None, **kwargs): #发送post请求
data:用于传参
json:用于传参
files:文件上传

基于postman:
form-data:既有表单参数也有文件上传  files
x-www-form-urlencoded 表单  data
raw: json(json),xml,text (data)
binary:二进制文件上传(data)

requests.put()--->def put(url, data=None, **kwargs): #发送put请求

requests.delete()-->def delete(url, **kwargs):  #发送delete请求

requests.request--->def  request(method,url,**kwargs) #发送任意请求,他是get,post,put,delete的底层方法

request.session()--->s=def session()

s.request() #返回session对象的request方法

def request(     session对象的request方法
        self,
        method, #请求方式
        url,  #请求路径
        params=None, #params参数
        data=None,    #data参数
        json=None,   #json参数
        headers=None, #请求头
        cookies=None, #cookie信息
        files=None, #文件上传      
--------------------------------------------------------
        auth=None, #用户权限token
        timeout=None, #超时处理
        allow_redirects=True, #是否要重定向
        proxies=None, #代理
        hooks=None, #钩子
        stream=None, #文件下载
        verify=None, #证书验证
        cert=None, #ca证书
    ):

说明:get,post,put,delete调用的是request方法,request方法调用session对象的 request方法

requests.request()和session.request()的区别在于:
前者的每个请求都是独立的,后者会自动关联所有的请求的cookie信息

1.2 requests的response对象

  • res.text:把返回结果转化成文本输出
  • res.json() 把返回结果转换成字典输出
  • res.content 把返回结果转换成字节输出
  • res.status_code 返回状态码
  • res.reson 返回状态信息
  • res.cookie 返回cookie信息
  • res.encoding 编码格式
  • res.headers 响应头信息
  • res.request.xxxxx 返回请求的信息

1.3 数据提取

1.3.1 正则表达式提取

re.search("正则表达式",res.text) 只匹配一个值,没有匹配到返回None
re.findall("正则表达式",res.text)匹配多个值,返回列表list,多个值通过下标取值,没有匹配到返回None

def test_login(self):
        url="user/login"
        data={
            "username":"wangwu",
            "pwd":"123456"
        }
        #post请求,返回响应结果
        res=requests.post(url,json=data)
        print(res.text)
        #token = re.search("'token':'(.*?)'", res.text)
        token=re.search('"token":"(.*?)"',res.text)[1]
        print(token)
        re.findall('"token":"(.*?)"',res.text)

1.3.2 jsonpath提取

token=jsonpath.jsonpath(res.json(),'$.data.token') 或者 token=jsonpath.jsonpath(res.json(),'$..token')
jsonpath.jsonpath返回的是一个列表,通过下标取值,没有找到返回None

def test_login(self):
        url="user/login"
        data={
            "username":"wangwu",
            "pwd":"123456"
        }
        #post请求,返回响应结果
        res=requests.post(url,json=data)
        token=jsonpath.psonpath(res.json(),"$.data.token")
        #token=jsonpath.psonpath(res.json(),"$..token")
            

1.3.3 字典提取

def test_login(self):
        url="user/login"
        data={
            "username":"wangwu",
            "pwd":"123456"
        }
        #post请求,返回响应结果
        res=requests.post(url,json=data)
        result=res.json()
        TestLogin.token=result["data"]["token"]

1.4 接口关联

类变量

class TestLogin:

    token=""
    access_token=""
    csrf=""
    cookies=""
    sess=requests.session()

    def test_login(self):
        url="user/login"
        data={
            "username":"wangwu",
            "pwd":"123456"
        }
    
       #post请求,返回响应结果
        res=requests.post(url,json=data)
        print(res.text)
        TestLogin.token=jsonpath.psonpath(res.json(),"$.data.token")
        

单独文件保存

1.5 cookie和session关联的接口

   #cookie和session关联的接口
    def test_get_csrf(self):
        url="user/search"
        res=requests.get(url)
        #返回html使用text接收
        result=res.text
        TestLogin.csrf=re.search('csrf:"(.*?)"',result)
        TestLogin.cookies=res.cookies

        #使用cookie登录
    def test_login_cookie(self):
        url="user/login_cookie"
        headers={
            "Accept":"application/json, text/javascript, /; q=0.01",
            "X-Requested-With":"XMLHttpRequest"
        }
        data={
            "username":"wangwu",
            "password":"123456",
            "csrf":TestLogin.csrf
        }
        res=requests.post(url,data=data,headers=headers,cookies=TestLogin.cookies)
        print(res.json())

1.6 自动添加cookie请求

使用session对象的request方法

@allure.epic("项目名称:易宝商城接口自动化测试")
@allure.feature("模块名称:用户管理模块测试用例")
class TestLogin:

    token=""
    access_token=""
    csrf=""
    cookies=""
    sess=requests.session()

    #微信公众号获得access_token接口
    @pytest.mark.smoke
    def test_get_access_token(self):
        url="https://api.weixin.qq.com/cgi-bin/token"
        params={
            "grant_type":"client_credential",
            "appid":"wx8a9de483b93f225a",
            "secret":"7923ac815928dee3165720c910effb86"
        }
        res=TestLogin.sess.request(method="get",url=url,params=params)
        #res=requests.get(url,params=params)
        result=res.json()
        print(result)
        TestLogin.access_token=result["access_token"]
        print(TestLogin.access_token)

1.7 params的使用以及文件上传

@allure.epic("项目名称:易宝商城接口自动化测试")
@allure.feature("模块名称:用户管理模块测试用例")
class TestLogin:

    token=""
    access_token=""
    csrf=""
    cookies=""
    sess=requests.session()

    #使用cookie登录
    def test_login_cookie(self):
        url="user/login_cookie"
        headers={
            "Accept":"application/json, text/javascript, /; q=0.01",
            "X-Requested-With":"XMLHttpRequest"
        }
        data={
            "username":"wangwu",
            "password":"123456",
            "csrf":TestLogin.csrf
        }
        res = TestLogin.sess.request(method="post", url=url,data=data,headers=headers)
        #res=requests.post(url,data=data,headers=headers,cookies=TestLogin.cookies)
        print(res.json())
  
  
   #params和data的使用 def test_register(self): url="user/register" params={ "application":"app", "cleint_type":"h5" } data={ "username":"wangwu", "password":"123456", "sex":1, "email":"[email protected]", "address":"北京市" } res=requests.post(url,json=data,params=params) token=re.search("'token':'(.*?)'",res.text) #微信公众号文件上传接口 @pytest.mark.smoke def test_file_upload(self): url="https://api.weixin.qq.com/cgi-bin/media/uploadimg" params={ "access_token":TestLogin.access_token } data={ "metia":open(r"D:\231.png",mode="rb") } res = TestLogin.sess.request(method="post", files=data,params=params) #res=requests.post(url,files=data,params=params) result=res.json() print(result)

  

标签:python,res,json,url,token,详解,requests,data
From: https://www.cnblogs.com/lgs-tech/p/17470509.html

相关文章

  • Python字符串注意啦!
    注意在进行python里面进行比较时,一定要先看好比较双方的类型,如果我们想要比较的是字符串,第二项就一定要定义成字符串类型;例如:#这就是一个错误典型aa.get()==1#这个就会显示出False#我们需要将其改成这样aa.get()=='1'#这样才能够显示出True真的会谢!记住啦!......
  • Python自动化运维
    2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代码的可读性运算......
  • 这 3个Python 函数你知道吗?
    动动发财的小手,点个赞吧!作为21世纪最流行的语言之一,Python当然有很多有趣的功能值得深入探索和研究。今天将介绍其中的三个,每个都从理论上和通过实际示例进行介绍。我想要介绍这些函数的主要原因是它们可以帮助您避免编写循环。在某些情况下,循环的运行成本可能很高,除此之外,这些......
  • 用python获取文件夹中文件的路径,基础路径,后缀,复制文件等。
    #读取文件夹中文件的路径#方法一importosimportshutilwenjianjia=r'D:\Desktop\内部培训python'#文件夹绝对路径#r的作用是去除转义字符lujing=os.listdir(wenjianjia)#获取文件夹中所有文件的相对路径返回一个列表forlujing_listinlujing......
  • python 数据可视化———电子商务销售分析
    一、选题背景随着互联网和移动互联网技术的不断发展,电子商务已经成为了一个全球性的发展趋势。越来越多的商家和消费者都开始使用电子商务平台进行线上交易,这在一定程度上改变了传统商业模式,并且对于消费者而言,电子商务平台也提供了更为便捷的购物体验。因此,对于电子商务销售的分......
  • Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)
    问题描述:假设有一个6x6的棋盘,每个格子里有一个奖品(每个奖品的价值在100到1000之间),现在要求从左上角开始到右下角结束,每次只能往右或往下走一个格子,所经过的格子里的奖品归自己所有。问最多能收集价值多少的奖品。思路:每个格子所在路径的总奖品最大值依赖于左边的格子或右边的格子。......
  • Python寻找给定序列中相差最小的两个数字
    importrandomdefgetTwoClosestElements(seq):#先进行排序,使得相邻元素最接近#相差最小的元素必然相邻seq=sorted(seq)#无穷大dif=float('inf')#遍历所有元素,两两比较,比较相邻元素的差值#使用选择法寻找相差最小的两个元素fori,vi......
  • Python使用tkinter的Treeview组件实现表格功能
    fromtkinterimportTk,Scrollbar,Framefromtkinter.ttkimportTreeview#创建tkinter应用程序窗口root=Tk()#设置窗口大小和位置root.geometry('500x300+400+300')#不允许改变窗口大小root.resizable(False,False)#设置窗口标题root.title('通信录管理系统')#使......
  • Python调用安卓手机相机接口进行拍照
    感兴趣的朋友可以查阅sl4a模块的详细资料,实现更多功能。下面的代码需要在安卓手机上安装QPython3,然后打开QEdit,把代码复制粘贴过去,保存文件,然后运行就可以自动打开相机了。importsl4aimportosdroid=sl4a.Android()#默认保存到手机存储卡的根目录下,也可以自己修改成其他目录......
  • Python把列表中的数字尽量等分成n份
    问题描述:假设一个列表中含有若干整数,现在要求将其分成n个子列表,并使得各个子列表中的整数之和尽可能接近。下面的代码并没有使用算法,而是直接将原始列表分成n个子列表,然后再不断地调整各个子列表中的数字,从元素之和最大的子列表中拿出最小的元素放到元素之核最小的子列表中,重复这个......