5. 利用requests.session进行状态保持
requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。接下来我们就来学习它
5.1 requests.session的作用以及应用场景
- requests.session的作用
- 自动处理cookie,即 下一次请求会带上前一次的cookie
- requests.session的应用场景
- 自动处理连续的多次请求过程中产生的cookie
5.2 requests.session使用方法
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
session = requests.session() # 实例化session对象
response = session.get(url, headers, ...)
response = session.post(url, data, ...)
- session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致
5.3 课堂测试
使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面
5.3.1 提示
- 对github登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包
- 确定登陆请求的url地址、请求方法和所需的请求参数
- 部分请求参数在别的url对应的响应内容中,可以使用re模块获取
- 确定登陆后才能访问的页面的的url地址和请求方法
- 利用requests.session完成代码
5.3.2 参考代码
import requests
import re
# 构造请求头字典
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
}
# 实例化session对象
session = requests.session()
# 访问登陆页获取登陆请求所需参数
response = session.get('https://github.com/login', headers=headers)
authenticity_token = re.search('name="authenticity_token" value="(.*?)" />', response.text).group(1) # 使用正则获取登陆请求所需参数
# 构造登陆请求参数字典
data = {
'commit': 'Sign in', # 固定值
'utf8': '✓', # 固定值
'authenticity_token': authenticity_token, # 该参数在登陆页的响应内容中
'login': input('输入github账号:'),
'password': input('输入github账号:')
}
# 发送登陆请求(无需关注本次请求的响应)
session.post('https://github.com/session', headers=headers, data=data)
# 打印需要登陆后才能访问的页面
response = session.get('https://github.com/1596930226', headers=headers)
print(response.text)
知识点:掌握 利用requests.session进行状态保持
36’,
}
实例化session对象
session = requests.session()
访问登陆页获取登陆请求所需参数
response = session.get(‘https://github.com/login’, headers=headers)
authenticity_token = re.search(‘name=“authenticity_token” value=“(.*?)” />’, response.text).group(1) # 使用正则获取登陆请求所需参数
构造登陆请求参数字典
data = {
‘commit’: ‘Sign in’, # 固定值
‘utf8’: ‘✓’, # 固定值
‘authenticity_token’: authenticity_token, # 该参数在登陆页的响应内容中
‘login’: input(‘输入github账号:’),
‘password’: input(‘输入github账号:’)
}
发送登陆请求(无需关注本次请求的响应)
session.post(‘https://github.com/session’, headers=headers, data=data)
打印需要登陆后才能访问的页面
response = session.get(‘https://github.com/1596930226’, headers=headers)
print(response.text)
----
##### 知识点:掌握 利用requests.session进行状态保持
----