接口自动化之--requests详解
1.什么是requests?
答:requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自动化。
2.安装
pip install requests
3.requests常用方法
requests.get(url, params=None, **kwargs) **kwargs可变长度的字典。 requests.post(url, data=None, json=None, **kwargs) requests.put(url, data=None, **kwargs) requests.delete(url, **kwargs) requests.request(method, url, **kwargs) 包含了上面所有的请求
requests的底层方法:
底层方法: session.request() def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None):
4.request()返回的response对象
print(res.text) #返回body的text格式 print(res.json()) #返回body的dict格式 print(res.content) #返回body的byte格式 print(res.status_code) #返回状态码 print(res.reason) #返回状态信息 print(res.cookies) #返回响应的cookie信息 print(res.encoding) #返回编码格式 print(res.headers) #返回响应头 print(res.request.method) #返回请求的数据
5.json和dict(正常我们看到的都是字典就是json,若使用data传参,需要把字典转换成json字符串,若使用json传参,直接使用对应字典)
字典:dict
JSON:JSON字符串
json.loads() 把json字符串转化成dict
json.dumps() 把dict转化成json字符串
6.对应的参数类型:
data: 1.通过data传参,表示表单传参,默认的请求头:Content-Type:application/xwww-from-urlencoded,请求的格式是:a=1&b=2,传的参数的类型:纯键值对的字 典。 2.通过data传参,默认请求头:text/plain,传的参数的类型:字符串类型。
json: 1.通过json传参,默认请求头:Content-Type:application/json,传的参数类型:dict字典
files:文件上传
7.注意:有cookies关联的接口使用,发送请求都要使用(例:Test_request.session.request)方式发送请求,存在接口关联的强求一定要注意,请求的方式要一致,我自己写最后的两个接口的时候一个使用requests.session.request发送,一个使用get发送,导致无法关联
import json import random import re import requests class Test_request: access_token = '' csrf_token = '' #使用session传参会自动关联cookies session = requests.session() def test_get_token(self): url = "https://地址/cgi-bin/token" data = { "grant_type":"client", "appid":"wx", "secret":"307c" } res = requests.get(url=url,params=data) print(res.json()) Test_request.access_token = res.json()["access_token"] def test_get_mark(self): url = "https://地址/cgi-bin/tags/get" data = { "access_token": Test_request.access_token } res = requests.get(url=url,params=data) print(res.json()) def test_create_mark(self): url = "https://地址/cgi-bin/tags/create?access_token="+Test_request.access_token data ={"tag": {"name": "广东"+str(random.randint(10,100))}} res = requests.post(url=url,data=json.dumps(data)) print(json.loads(json.dumps(res.json()).replace(r"\\","\\"))) #Unicode默认是一个斜杠,所以要替换 def test_file_mark(self): url = "https://地址/cgi-bin/media/uploadimg?access_token="+Test_request.access_token data = { #"access_token": Test_request.access_token,这样传值是错误的,要做url中拼接 "media": open(r"D:/Titen/baogao.png",mode="rb") #只要是文件就是要先打开,文件地址1.r"D:/Titen/baogao.png",2.r"D:\\Titen\\baogao.png",都可以 } res = requests.post(url=url,files=data) print(res.json()) def test_shouye_windphp(self): url = "http://地址/pp/" res = Test_request.session.request(method="get",url=url) Test_request.csrf_token= re.search('name="csrf_token" value="(.*?)"',res.text).group(1)#返回网页中查找 print(Test_request.csrf_token)p def test_login_windphp(self): urls = "http://地址/pp/index.php?m=u&c=login&a=dorun" datas = { "username": "admin", "password": "123456", "csrf_token": Test_request.csrf_token, "backurl": "http://地址/pp/", "invite": "" } headers ={ "Accept":"application/json, text/javascript, /; q=0.01", "X-Requested-With":"XMLHttpRequest" } # res = requests.post(url=url,data=data,headers=header) #这样操作解决cookies关联问题 res =Test_request.session.request(method="post", url=urls, data=datas, headers=headers) print(res.text)
每篇一句:
我藏在人群中失去晴空
本文来自博客园,作者:Titen,转载请注明原文链接:https://www.cnblogs.com/chengxiazuohua/p/15642587.html