问题一:如何获取上个接口产生的csrf_token值?
import requests
response01=requests.get('http://47.107.178.45/phpwind') #第一个接口
body= response01.content.decode('utf-8') #上个接口所有的返回信息
cookie_value=re.findall('name="csrf_token" value="(.+?)"/>',body)[0] #获取上个页面的csrf_token值
print(cookie_value)
headers_info ={
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
'Accept':'application/json, text/javascript, */*; q=0.01',
'X-Requested-With':'XMLHttpRequest'
}
data_info={ 'username':'**',
'password':'123456',
'csrf_token':cookie_value, #引用csrf_value值
'csrf_token':cookie_value
}
para_info={'m':'u','c':'login','a':'dologin'}
response =requests.post(url='http://47.107.178.45/phpwind/index.php',params=para_info,data=data_info,headers=headers_info) #第二个接口
背景:用户登录一网站,可在不同页面进行来回切换【因浏览器有保存csrf_token信息的会话机制,以至于用户能携带csrf_token信息正常访问下个页面】
一、问题:如何在两个请求之间建立联系?实际遇到的问题:在pycharm+requests进行接口自动化时,如何把上个接口的csrf_token值保存到下个接口中?
方案:requests的调用替换成session对象来调用
代码如下:
import requests import re session_re=requests.session() #创建session对象 response01=session_re.get('http://47.107.178.45/phpwind/') #上个接口 body= response01.content.decode('utf-8') value=re.findall('name="csrf_token" value="(.+?)"/>',body)[0] print(value) headers_info ={ 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', 'Accept':'application/json, text/javascript, */*; q=0.01', 'X-Requested-With':'XMLHttpRequest' }
para_info={'m':'u','c':'login','a':'dologin'}
data_info={ 'user_name':'**', 'password':'123456', 'csrf_token':value}
response02 =session_re.post(url='http://47.107.178.45/phpwind/index.php',params=para_info,data=data_info,headers=headers_info) #下个接口
二、requests库中的session对象还能为我们提供请求方法的缺省数据。
import requests headers_info ={ 'Accept':'application/json, text/javascript, */*; q=0.01', 'X-Requested-With':'XMLHttpRequest' } session_obj =requests.session() session_obj.headers.update(headers_info) #更新session_obj对象中的header信息 head ={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',} session_obj.get(url='http://47.107.178.45/phpwind/',headers=head)