1、方法1 手动关联token ,cookie 需要将
(1)token和cookie值定义在类变量里面, 这样其他的方法才能通过类变量去引用
(2)res.cookies # 可以直接获取返回的cookie值
(3)我们一般通过正则表达式,获取token值,传递给下一个接口
token = re.search(r'csrf_token=(.*?); path=/;', res_header["set-Cookie"]).group(1)
r“表示原生字符串”
group(1) 匹配第一个满足条件的值
class Test_php_api():
# 定义一个全局的类变量.类变量的使用需要类来调用
csrf_token = ""
cookie_data = ""
def test_first_page(self):
url = "http://47.107.116.139/phpwind/"
res = requests.get(url=url)
result = res.text
# print(result)
# 处理相应头里面的返回的鉴权码
res_header = res.headers
# print(res_header)
# 可以看出响应头返回的是一个字典的格式, 类变量的引用需要类来调用
# r 表示原生字符串(rawstring),该字符串声明了引号中的内容表示该内容的原始含义,避免了多次转义造成的反斜杠困扰。
Test_php_api.csrf_token = re.search(r'csrf_token=(.*?); path=/;', res_header["set-Cookie"]).group(1)
print(Test_php_api.csrf_token)
# 处理cookie鉴权 res.cookies() 只有保存到类变量里面,下面的函数才能引用
Test_php_api.cookie_data = res.cookies
def test_login(self):
url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
data = {
"username": "admin",
"password": "msjy123",
"csrf_token": Test_php_api.csrf_token,
"backurl": "http://47.107.116.139/phpwind/",
"invite": ""
}
# 在请求结果如果返回的是 HTML 格式 ,需要检查请求头是否填写错误
headers = {
"Accept": "application/json, text/javascript, /; q=0.01",
"X-Requested-With": "XMLHttpRequest"
}
res = requests.post(url=url, data=data, headers=headers,cookies=Test_php_api.cookie_data)
print(res.text)
#返回 message":["Sorry, CSRF verification failed(token missing or incorrect) ,当所有的参数都填写了,请求失败 考虑是需要进行cookie处理(cookie鉴权)
2、方法2 自动关联cookie值
sess = requests.session() 、此方法会自动获取cookie的值, 那么在后面的请求中,只需要用 requests.session 请求就可以一直保持 cookie的关联
import allure
import pytest
import requests
import random
import re
class Test_php_api():
# 定义一个全局的类变量.类变量的使用需要类来调用
csrf_token = ""
# 第一步定义全局的seeion请
sess = requests.session()
def test_first_page(self):
url = "http://47.107.116.139/phpwind/"
# 第二步: 用session 去请求 ,请求方法一参数的形式传递
res = Test_php_api.sess.request(method="get", url=url)
res_header = res.headers
Test_php_api.csrf_token = re.search(r'csrf_token=(.*?); path=/;', res_header["set-Cookie"]).group(1)
print(Test_php_api.csrf_token)
def test_login(self):
url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
data = {
"username": "admin",
"password": "msjy123",
"csrf_token": Test_php_api.csrf_token,
"backurl": "http://47.107.116.139/phpwind/",
"invite": ""
}
# 在请求结果如果返回的是 HTML 格式 ,需要检查请求头是否填写错误
headers = {
"Accept": "application/json, text/javascript, /; q=0.01",
"X-Requested-With": "XMLHttpRequest"
}
res = Test_php_api.sess.request(method="post", url=url, data=data, headers=headers)
print(res.text)