全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Python怎樣實(shí)現(xiàn)Cookie自動(dòng)登錄?

更新時(shí)間:2023-05-22 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

當(dāng)用戶(hù)首次登錄一個(gè)網(wǎng)站時(shí),網(wǎng)站往往會(huì)要求用戶(hù)輸入用戶(hù)名和密碼,并且給出自動(dòng)登錄選項(xiàng)供用戶(hù)勾選。用戶(hù)如果勾選了自動(dòng)登錄選項(xiàng),那么在下一次訪問(wèn)該網(wǎng)站時(shí),不用輸入用戶(hù)名和密碼便可以登錄,這是因?yàn)榈谝淮蔚卿洉r(shí)服務(wù)器發(fā)送了包含登錄憑證的Cookie到用戶(hù)硬盤(pán)上,第二次登錄時(shí)瀏覽器發(fā)送了Cookie,服務(wù)器驗(yàn)證Cookie后就識(shí)別了用戶(hù)的身份,用戶(hù)便無(wú)須輸入用戶(hù)名和密碼。

Cookie(有時(shí)也用其復(fù)數(shù)形式Cookies)是指某些網(wǎng)站為了辨別用戶(hù)身份、進(jìn)行會(huì)話(huà)跟蹤,而暫時(shí)存儲(chǔ)在客戶(hù)端的一段文本數(shù)據(jù)(通常經(jīng)過(guò)加密)。

在Requests庫(kù)中,發(fā)送請(qǐng)求時(shí)可以通過(guò)兩種方式攜帶Cookie,一種方式是直接將包含Cookie信息的請(qǐng)求頭傳入請(qǐng)求函數(shù)的headers參數(shù);另一種方式是將Cookie信息傳入請(qǐng)求函數(shù)的cookies參數(shù)。不過(guò),cookies參數(shù)需要接收一個(gè)RequestsCookieJar類(lèi)的對(duì)象,該對(duì)象類(lèi)似于一個(gè)字典,會(huì)以名稱(chēng)(Name)與值(Value)的形式存儲(chǔ)Cookie。

下面以登錄后的百度首頁(yè)為例,分別通過(guò)上述兩種方式演示如何使用Requests實(shí)現(xiàn)Cookie登錄。

第1種方式的實(shí)現(xiàn)代碼如下:

import requests
headers = {
   'cookie':‘此處填寫(xiě)登錄百度網(wǎng)站后查看的Cookie信息’,設(shè)置字段Cookie
   'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4)'
                 'ApplewebKit/537.36 (KHTML, like Gecko)'
                 'Chrome/53.0.2785.116 Safari/537.36',}€設(shè)置字段User-Agent
response = requests.get('https://www.baidu.com/', headers=headers)
print(response.tgkt)

第2種方式的實(shí)現(xiàn)代碼如下:

import requests
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) '
                        'AppleWebKit/537.36 (KHTML,1ike Gecko)'
                        'Chrome/53.0.2785.116 Safari/537.36'}
# 準(zhǔn)備Cookie
cookie='此處填寫(xiě)登錄百度網(wǎng)站后查看的cookie信息'
# 創(chuàng)建RequestsCookieJar類(lèi)的對(duì)象
jar_obj = requests.cookies.RequestsCookieJar()
# 以逗號(hào)為分隔符分隔Cookie.并將獲得的鍵和值保存至jar_obj中
for temp in cookie.split(';'):
   key, value = temp.split('=', 1)
   jar_obj.set(key, value)
response = requests.get('https://www.baidu.com/',
           headers=header, cookies=jar_obj)
print (response,text)

上述兩段代碼的運(yùn)行結(jié)果如下。

······
"userAttr":Number("")|| 0,
"username":"Itcast_001122",
"unametype":"2",
"userIsSkined":"off",
"userIsNewSkined":"off",
"userSkinName":"",
"userSkinOpacity":"70",
······

由加粗部分的代碼可以看出,程序輸出的網(wǎng)頁(yè)源代碼包含了用戶(hù)名Itcast_001122。這說(shuō)明我們成功地訪問(wèn)了登錄后的百度首頁(yè)。

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!