前言
Cookie和Session的概念我也接觸過很多次,但一直沒有機(jī)會(huì)實(shí)踐一下,正巧最近想用爬蟲模擬登錄教務(wù)系統(tǒng),就想到了利用Http的請(qǐng)求頭來進(jìn)行登錄操作
登錄的流程

這樣做有什么好處?
最大的好處就是用戶只需要輸入一次賬號(hào)密碼,之后再訪問網(wǎng)頁(yè)時(shí),只需要再Headers信息利用Cookie包含Session_id,后臺(tái)就可以根據(jù)Session_id來判斷用戶是否登錄
Session_id也有可能存在內(nèi)存上
Set_cookie
一般打開教務(wù)系統(tǒng)時(shí),因?yàn)槲覀兦懊娑啻蔚卿涍^,因此Cookie信息會(huì)一直保存在瀏覽器中,我們要做的就是先清除Cookie
清除完Cookie刷新界面,可以看到返回的頭部信息
Cookie
之后我們先輸入賬號(hào)密碼登錄
成功登錄之后頁(yè)面會(huì)進(jìn)行跳轉(zhuǎn),對(duì)于我使用的教務(wù)系統(tǒng)
跳轉(zhuǎn)到了
http://172.18.254.101/xs_main.aspx?xh=學(xué)號(hào)
然后看一下對(duì)于這個(gè)頁(yè)面的請(qǐng)求頭部信息
利用爬蟲進(jìn)行模擬登錄
注意
在進(jìn)行模擬登錄時(shí)一定要在網(wǎng)頁(yè)上保持教務(wù)系統(tǒng)的登錄(不要退出!!?。?/p>
觀察整個(gè)請(qǐng)求頭發(fā)現(xiàn),只需要在利用爬蟲進(jìn)行請(qǐng)求頁(yè)面時(shí)把Headers與上述圖片的Headers設(shè)置完全一樣就可以獲得頁(yè)面信息
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)
因?yàn)檎?qǐng)求頭中包含了Session_id等信息,因此后臺(tái)服務(wù)器會(huì)對(duì)Session_id進(jìn)行認(rèn)證,認(rèn)證通過,就意味著登錄成功
退出網(wǎng)頁(yè)
當(dāng)我們?cè)诮虅?wù)系統(tǒng)退出時(shí),發(fā)現(xiàn)上述代碼已經(jīng)不能用了
猜測(cè)在后臺(tái)服務(wù)器中Session_id存儲(chǔ)在內(nèi)存上,要不然對(duì)于頻繁的登錄登出操作如果通過數(shù)據(jù)庫(kù)進(jìn)行增刪查,那么會(huì)對(duì)速度造成很大的影響