python之requests库详解
1.requests库详解
发送http请求,接受http响应的库
安装:pip install requests
1.1 常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 4 5 6 7 8 9 10 11 | 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 字典提取
1 2 3 4 5 6 7 8 9 10 | 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 接口关联
类变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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关联的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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的使用以及文件上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | @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" : "wangwu612@163.com" , "address" : "北京市" } res = TestLogin.sess.request(method = "post" ,url = url,json = data,params = params) #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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了