溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中Cookie是什么

發(fā)布時(shí)間:2020-09-24 10:26:19 來源:億速云 閱讀:419 作者:Leah 欄目:編程語言

本篇文章為大家展示了Python中Cookie是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Cookie 是指某些網(wǎng)站服務(wù)器為了辨別用戶身份和進(jìn)行Session跟蹤,而儲存在用戶瀏覽器上的文本文件,Cookie可以保持登錄信息到用戶下次與服務(wù)器的會話。

HTTP是無狀態(tài)的面向連接的協(xié)議, 為了保持連接狀態(tài), 引入了Cookie機(jī)制。Cookie是http消息頭中的一種屬性,包括:

Cookie名字(Name)

Cookie的值(Value)

Cookie的過期時(shí)間(Expires/Max-Age)

Cookie作用路徑(Path)

Cookie所在域名(Domain),

使用Cookie進(jìn)行安全連接(Secure)。

前兩個(gè)參數(shù)是Cookie應(yīng)用的必要條件,另外,還包括Cookie大?。⊿ize,不同瀏覽器對Cookie個(gè)數(shù)及大小限制是有差異的)。

Cookie由變量名和值組成,根據(jù) Netscape公司的規(guī)定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

Cookie應(yīng)用

Cookies在爬蟲方面最典型的應(yīng)用是判定注冊用戶是否已經(jīng)登錄網(wǎng)站,用戶可能會得到提示,是否在下一次進(jìn)入此網(wǎng)站時(shí)保留用戶信息以便簡化登錄手續(xù)。

import urllib.request

# 1. 構(gòu)建一個(gè)已經(jīng)登錄過的用戶的headers信息
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) 
    Chrome/73.0.3683.103 Safari/537.36",
    "Cookie": "anonymid=jurpmxe9-orl7u3;"
              "depovince=BJ;"
              " _r01_=1; "
              "JSESSIONID=abcwYLyIY7VNIhCDVWcPw;"
              " jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C148406060
              7478%7C1%7C1484060607173;"
              " jebecookies=f1fd29c4-bd08-4d66-8834-72e42b70d2cb|||||; "
              "ick_login=0f790ea2-c8bf-4d64-a394-36745febeb26;"
              " _de=622DE758381206EB340E4CEC836F3769696BF75400CE19CC;"
              " p=7e50f3fe10ca320e36dae001c72d392d3;"
              " ap=327550029;"
              " first_login_flag=1;"
              " ln_uact=562352353@qq.com;"
              " ln_hurl=http://hdn.xnimg.cn/photos/hdn121/20120930/2035/h_main_hcDy_40fc000002d91375.jpg;"
              " t=d7c6ae064b81ae15f5b91f5897dc61553;"
              " societyguester=d7c6ae064b81ae15f5b91f5897dc61553;"
              " id=485439163;"
              " xnsid=bc995dc8;"
              " ver=7.0;"
              " loginfrom=null"
}

# 2. 通過headers里的報(bào)頭信息(主要是Cookie信息),構(gòu)建Request對象
request = urllib.request.Request("http://www.renren.com", headers=headers)
 
# 3. 直接訪問renren主頁,服務(wù)器會根據(jù)headers報(bào)頭信息(主要是Cookie信息),判斷這是一個(gè)已經(jīng)登錄的用戶,并返回相應(yīng)的頁面
response = urllib.request.urlopen(request)

# 4. 打印響應(yīng)內(nèi)容
print(response.read().decode("utf-8"))

但是這樣做太過復(fù)雜,我們先需要在瀏覽器登錄賬戶,并且設(shè)置保存密碼,并且通過抓包才能獲取這個(gè)Cookie,那有么有更簡單方便的方法呢?

cookielib庫 和 HTTPCookieProcessor處理器

在Python處理Cookie,一般是通過 http 模塊的 cookiejar 模塊和 urllib 模塊的 HTTPCookieProcessor 處理器類一起使用。

cookiejar模塊:主要作用是提供用于存儲cookie的對象。

HTTPCookieProcessor處理器:主要作用是處理這些cookie對象,并構(gòu)建handler對象。

import urllib.request
import urllib.parse
from http import cookiejar

# 1. 構(gòu)建一個(gè)CookieJar對象實(shí)例來保存cookie
cookie = cookiejar.CookieJar()

# 2. 使用HTTPCookieProcessor()來創(chuàng)建cookie處理器對象,參數(shù)為CookieJar()對象
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)

# 3. 通過 build_opener() 來構(gòu)建opener
opener = urllib.request.build_opener(cookie_handler)

# 4. addheaders 接受一個(gè)列表,里面每個(gè)元素都是一個(gè)headers信息的元祖, opener將附帶headers信息
opener.addheaders = [("User-Agent",
                      "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like 
                      Gecko) Chrome/73.0.3683.103 Safari/537.36")]

# 5. 需要登錄的賬戶和密碼
data = {"email": "562352353@qq.com", "password": "chen562352353"}

# 6. 通過urlencode()轉(zhuǎn)碼
postdata = urllib.parse.urlencode(data).encode("utf-8")

# 7. 構(gòu)建Request請求對象,包含需要發(fā)送的用戶名和密碼
request = urllib.request.Request("http://www.renren.com/PLogin.do", data=postdata)

# 8. 通過opener發(fā)送這個(gè)請求,并獲取登錄后的Cookie值,
opener.open(request) 
# 9. opener包含用戶登錄后的Cookie值,可以直接訪問那些登錄后才可以訪問的頁面
response = opener.open("http://www.renren.com/485439163")

# 10. 打印響應(yīng)內(nèi)容
print(response.read().decode("utf-8"))

模擬登錄要注意幾點(diǎn):

登錄一般都會先有一個(gè)HTTP GET,用于拉取一些信息及獲得Cookie,然后再HTTP POST登錄。

HTTP POST登錄的鏈接有可能是動態(tài)的,從GET返回的信息中獲取。

password 有些是明文發(fā)送,有些是加密后發(fā)送。有些網(wǎng)站甚至采用動態(tài)加密的,同時(shí)包括了很多其他數(shù)據(jù)的加密信息,只能通過查看JS源碼獲得加密算法,再去破解加密,非常困難。

大多數(shù)網(wǎng)站的登錄整體流程是類似的,可能有些細(xì)節(jié)不一樣,所以不能保證其他網(wǎng)站登錄成功。

上述內(nèi)容就是Python中Cookie是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI