http协议是无状态的,也就是每个请求都是独立的。那么登录后的一系列动作,都需要用cookie来验证身份是否是登录状态,为了高效的管理会话,保持会话,于是就有了session
session简介
session是一种管理用户状态和信息的机制,与cookies的不同的是,session的数据是保存在服务器端。说的明白点就是session相当于一个虚拟的浏览器,在这个浏览器上处于一种保持登录的状态。
session登录
格式:
# session 用法 | Basic Usage:: | | >>> import requests | >>> s = requests.Session() | >>> s.get('https://httpbin.org/get') | <Response [200]> | | Or as a context manager:: | | >>> with requests.Session() as s: | >>> s.get('https://httpbin.org/get') | <Response [200]>
1.举个例子,模拟百度登录场景
2.查看登录后百度账号的cookies值,经过观察发现是由”BAIDUID“和"BDUSS"
3.导入requests模块,使用session()函数
4.携带cookies进行请求,通过返回内容,判断是否登录成功。
# coding:utf-8 import requests # 保持登录状态 s = requests.session() url = 'https://www.baidu.com/' # 请求头 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36" } r = s.post(url,headers=headers) # 查看的cookies值 cooks = { "BDUSS":"xxxxxxx", "BAIDUID":"XXXXXXXX" } # 添加登录所携带的cookies c = requests.cookies.RequestsCookieJar() c.set("BDUSS",cooks["BDUSS"]) c.set("BAIDUID",cooks["BAIDUID"]) s.cookies.update(c) # 判断是否登录成功 r2 = s.get(url,headers=headers) if '我在谁身旁' in r2.text: print('登录成功') else: print("登录失败")
执行结果:
登录成功
这个时候就可以做一些登录过后的操作。
session模拟浏览器,浏览器中登录状态,只要浏览器不退出,就可以继续做其他的操作