Python怎樣實現Cookie自動登錄?
當用戶首次登錄一個網站時,網站往往會要求用戶輸入用戶名和密碼,并且給出自動登錄選項供用戶勾選。用戶如果勾選了自動登錄選項,那么在下一次訪問該網站時,不用輸入用戶名和密碼便可以登錄,這是因為第一次登錄時服務器發送了包含登錄憑證的Cookie到用戶硬盤上,第二次登錄時瀏覽器發送了Cookie,服務器驗證Cookie后就識別了用戶的身份,用戶便無須輸入用戶名和密碼。
Cookie(有時也用其復數形式Cookies)是指某些網站為了辨別用戶身份、進行會話跟蹤,而暫時存儲在客戶端的一段文本數據(通常經過加密)。
在Requests庫中,發送請求時可以通過兩種方式攜帶Cookie,一種方式是直接將包含Cookie信息的請求頭傳入請求函數的headers參數;另一種方式是將Cookie信息傳入請求函數的cookies參數。不過,cookies參數需要接收一個RequestsCookieJar類的對象,該對象類似于一個字典,會以名稱(Name)與值(Value)的形式存儲Cookie。
下面以登錄后的百度首頁為例,分別通過上述兩種方式演示如何使用Requests實現Cookie登錄。
第1種方式的實現代碼如下:
import requests
headers = {
'cookie':‘此處填寫登錄百度網站后查看的Cookie信息’,設置字段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',}€設置字段User-Agent
response = requests.get('https://www.baidu.com/', headers=headers)
print(response.tgkt)
第2種方式的實現代碼如下:
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'}
# 準備Cookie
cookie='此處填寫登錄百度網站后查看的cookie信息'
# 創建RequestsCookieJar類的對象
jar_obj = requests.cookies.RequestsCookieJar()
# 以逗號為分隔符分隔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)
上述兩段代碼的運行結果如下。
······
"userAttr":Number("")|| 0,
"username":"Itcast_001122",
"unametype":"2",
"userIsSkined":"off",
"userIsNewSkined":"off",
"userSkinName":"",
"userSkinOpacity":"70",
······
由加粗部分的代碼可以看出,程序輸出的網頁源代碼包含了用戶名Itcast_001122。這說明我們成功地訪問了登錄后的百度首頁。