http协议是无状态的,也就是每一个请求都是独立的。那么登陆后的一系列动做,都须要用cookie来验证身份是不是登陆状态,为了高效的管理会话,保持会话,因而就有了session浏览器
session是一种管理用户状态和信息的机制,与cookies的不一样的是,session的数据是保存在服务器端。说的明白点就是session至关于一个虚拟的浏览器,在这个浏览器上处于一种保持登陆的状态。服务器
格式:cookie
# 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.举个例子,模拟百度登陆场景session
2.查看登陆后百度帐号的cookies值,通过观察发现是由”BAIDUID“和"BDUSS"函数
3.导入requests模块,使用session()函数post
4.携带cookies进行请求,经过返回内容,判断是否登陆成功。url
# 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("登陆失败")
执行结果:
登陆成功
这个时候就能够作一些登陆事后的操做。spa
session模拟浏览器,浏览器中登陆状态,只要浏览器不退出,就能够继续作其余的操做code