前言
Cookie和Session的概念我也接触过很多次,但一直没有机会实践一下,正巧最近想用爬虫模拟登录教务系统,就想到了利用Http的请求头来进行登录操作
登录的流程
无标题绘图.png这样做有什么好处?
最大的好处就是用户只需要输入一次账号密码,之后再访问网页时,只需要再Headers
信息利用Cookie
包含Session_id
,后台就可以根据Session_id
来判断用户是否登录
Session_id
也有可能存在内存上
Set_cookie
一般打开教务系统时,因为我们前面多次登录过,因此Cookie
信息会一直保存在浏览器中,我们要做的就是先清除Cookie
清除完Cookie
刷新界面,可以看到返回的头部信息
Cookie
之后我们先输入账号密码登录
成功登录之后页面会进行跳转,对于我使用的教务系统
跳转到了
http://172.18.254.101/xs_main.aspx?xh=学号
然后看一下对于这个页面的请求头部信息
利用爬虫进行模拟登录
注意
在进行模拟登录时一定要在网页上保持教务系统的登录(不要退出!!!)
观察整个请求头发现,只需要在利用爬虫进行请求页面时把Headers
与上述图片的Headers
设置完全一样就可以获得页面信息
import requests
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Cookie': 'ASP.NET_SessionId=t2iov2450tkelm55eiqm3ki3; BIGipServerpool-jw=2046694060.0.0000',
'Host': '172.18.254.101',
'Referer': 'http://172.18.254.101/',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
}
r = requests.get('http://172.18.254.101/xs_main.aspx?xh=201616070204', headers=headers)
print(r.text)
因为请求头中包含了Session_id
等信息,因此后台服务器会对Session_id
进行认证,认证通过,就意味着登录成功
退出网页
当我们在教务系统退出时,发现上述代码已经不能用了
cookie5.PNG
猜测在后台服务器中Session_id
存储在内存上,要不然对于频繁的登录登出操作如果通过数据库进行增删查,那么会对速度造成很大的影响
网友评论