requests模块02——获取登录cookie值&session应用

问题一:如何获取上个接口产生的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)

  

  

原文地址:https://www.cnblogs.com/miaoxiaochao/p/13054450.html