目录
post(url, data=None, json=None, **kwargs)
今日内容:接口自动化之requests模块详解以及Cookie,Session关联处理
资源:python+requests+pytest接口自动化框架(1-4)-Python文档类资源-CSDN下载
一、requests库简介
1.requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自
动化。
pip install requests
二、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) 包含了上面所有的请求
底层方法:
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):
返回:响应的数据response
method:请求方式
url:请求路径
params:get请求传参
data和json:post或put传参。
headers:请求头
cookies:cookie信息
files:文件上传
三、request()返回的response对象
print(res.text) #返回body的text格式
{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}
print(res.json()) #返回body的dict格式---------重点--------

{'access_token': '55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK', 'expires_in': 7200}
print(res.content) #返回body的byte格式
b'{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}'
print(res.status_code) #返回状态码
200
print(res.reason) #返回状态信息
OK
print(res.cookies) #返回响应的cookie信息
<RequestsCookieJar[]>
print(res.encoding) #返回编码格式
utf-8
print(res.headers) #返回响应头
{'Connection': 'keep-alive', 'Content-Type': 'application/json; encoding=utf-8', 'Date': 'Thu, 14 Apr 2022 08:42:45 GMT', 'Content-Length': '194'}
print(res.request.method) #返回请求的数据
GET
四、实战案例
字典:dict
JSON:JSON字符串
json.loads() 把json字符串转化成dict
json.dumps() 把dict转化成json字符串
post(url, data=None, json=None, **kwargs)
Postman中post的四种传参方式:
form-data:可以传键值对,也可以传文件。
请求头中 Content-Type:muilpart/form-data 表单的请求方式通过data传参 a=1&b=2
x-www-form-urlencoded:只能传键值对
请求头中 Content-Type:application/x-www-from-urlencoded 表单的方式通过data传参
raw:text,javascript,json,html,xml
Content-Type:text/plain
Content-Type:application/javascript
Content-Type:application/json 通过json传参(字典格式) {a:1,b:2}
Content-Type:text/html
Content-Type:application/xml
binary:把文件转化成二进制传参
Content-Type:application/octent-stream通过data传参
总结:
通过data传参data:
场景一:表示表单传参
默认的请求头:Content-Type:application/x- www-from-urlencoded,
请求的格式是:a=1&b=2,
传的参数的类型:纯键值对的字典
场景二:表示字符串传参,
默认请求头:text/plain
传的参数的类型:字符串类型
通过json传参:
默认请求头:Content-Type:application/json
传的参数类型: dict(键值对、非键值对都可以)

files:文件上传
案例
案例1:创建标签
def test_create_flag(self):
urls = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token="+TestApi.access_token
datas = {"tag":{"name":"天草柑橘"}}
res = requests.post(url=urls,json=datas)
print(res.json())
{'tag': {'id': 5438, 'name': '\\u5929\\u8349\\u67d1\\u6a58'}}
替换成标准的unicode格式 单个\ 此时中文可以显示成功
print(json.loads(json.dumps(res.json()).replace(r"\\","\\")))
案例2:文件上传
def test_file_upload(self):
urls = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+TestApi.access_token
datas = {
"media": open(r"../testfile/img/seola.jpg",'rb')
}
res = requests.post(url=urls,files=datas)
print(res.json())
案例3:访问web项目
凡是web项目的接口,大部分都存在cookie关联。
# 通过session会话去关联。session默认的情况下回自动的关联cookie。
session = requests.session()
def test_phpwind_index(self):
urls = "http://47.107.116.139/phpwind/"
res = TestApi.session.request("get",url=urls)
# 凡是web项目的接口,大部分都存在cookie关联。笨方法1 取cookie 好方法通过session关联
# TestApi.phpwind_cookies = res.cookies
# TestApi.csrf_token = dict(TestApi.phpwind_cookies)['csrf_token']
TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"', res.text).group(1)
def test_phpwind_login(self):
urls = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
datas = {
"username": "王晓佳",
"password": "123456",
"csrf_token": TestApi.csrf_token,
"backurl": "http://47.107.116.139/phpwind/",
"invite": ""
}
headers = {
"Accept": "application/json, text/javascript, /; q=0.01",
"X-Requested-With": "XMLHttpRequest"
}
# 笨方法1 用cookie res = requests.post(url=urls, data=datas, headers=headers, cookies=TestApi.phpwind_cookies)
res = TestApi.session.request("post",url=urls,data=datas,headers=headers)
print(res.text)