cookie原理和基本使用

2021-10-04 23:33:08 字數 4130 閱讀 9253

在**中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料(cookie)給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的cookie資料自動的攜帶給伺服器,伺服器通過瀏覽器攜帶的資料就能判斷當前使用者是哪個了。cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4kb。因此使用cookie只能儲存一些小量的資料。

set-cookie: name=value;expires/max-age=date;path=path;domain=domain_name;secure

cookie是指**伺服器為了辨別使用者身份和進行session跟蹤,而儲存在使用者瀏覽器上的文字檔案,cookie可以保持登陸資訊到下次與伺服器對話

以人人網為例,人人網中,要訪問某個人的主頁,必須登入後才能訪問。登入說白了就是有登入資訊,用**訪問的話就必須有正確的cookie資訊才能訪問,第一種是使用瀏覽器訪問,然後將cookie資訊複製下來放到headers中,

#不使用cookie資訊訪問

from urllib import request

url=

''headers=

req=request.request(url,headers=headers)

#返回乙個響應物件

resp=request.urlopen(req)

#將資料寫進renren.html中

with

open

('renren.html'

,'w'

)as fp:

#write函式必須寫入乙個str的資料型別

#resp.read()讀出來的是乙個bytes的資料型別

#所以應對資訊解碼

#bytes->decode->str

#str->encode->bytes

fp.write(resp.read(

).decode(

'utf-8'

))

在目錄裡面開啟檔案:

訪問不了介面

from urllib import request

headers =

url =

''req = request.request(url,headers=headers)

resp = request.urlopen(req)

with

open

('renren.html'

,'w',encoding=

'utf-8'

)as fp:

fp.write(resp.read(

).decode(

'utf-8'

))

但是每次在訪問需要cookie的頁面都要從瀏覽器中複製cookie比較麻煩。在python處理cookie,一般是通過http.cookiejar模組和urllib模組的httpcookieprocessor處理器類一起使用。http.cookiejar模組主要作用是提供用於儲存cookie的物件。而httpcookieprocessor處理器主要作用是處理這些cookie物件,並構建handler物件。

該模組主要的類有cookiejar、filecookiejar、mozillacookiejar、lwpcookiejar。這四個類的作用分別如下:

利用http.cookiejar和request.httpcookieprocessor登入人人網。

httpcookieprocessor類似於proxyhandler,使用來儲存請求

# 模擬登入人人網

#1.登入

#1.1建立乙個cookiejar物件

cookiejar=cookiejar(

)# 1.2使用cookiesjar建立乙個httpcookieprocess物件

# 1.3使用上一步建立的handler建立乙個opener

opener=request.build_opener(handler)

#1.4使用opener傳送登入的請求(人人網的郵箱和密碼)

headers=

data=

#郵箱賬號和密碼

login_url=

""#data需要編碼

req = request.request(login_url, headers=headers, data=parse.urlencode(data)

.encode(

'utf-8'))

opener.

open

(req)

# 2.訪問個人主頁

dapeng_url=

""#獲取個人主頁的頁面的時候,不更新新建乙個opener

#而應該使用之前的那個opener,因為之前的那個opener已經包含了

#登入需要的cookie資訊

req=request.request(dapeng_url,headers=headers)

resp=opener.

open

(req)

with

open

('renren.html'

,'w'

)as fp:

#write函式必須寫入乙個str的資料型別

#resp.read()讀出來的是乙個bytes的資料型別

#所以應對資訊解碼

#郵箱密碼請設定成自己的

data = parse.urlencode(data)

.encode(

'utf-8'

) login_url =

""req = request.request(login_url, headers=headers, data=data)

opener.

open

(req)

defvisit_profile

(opener)

: url =

''req = request.request(url,headers=headers)

resp = opener.

open

(req)

with

open

('renren.html'

,'w'

)as fp:

fp.write(resp.read(

).decode(

"utf-8"))

if __name__ ==

'__main__'

: opener = get_opener(

) login_renren(opener)

visit_profile(opener)

Cookie基本工作原理

cookie基本工作原理cookie使用httpheader傳遞資料。cookie機制定義了兩種報頭 set cookie報頭和cookie報頭。set cookie報頭包含於web伺服器的響應頭 responseheader 中,cookie報頭包含在瀏覽器客戶端請求頭 reguestheader...

Cookie 和 Session 原理和區別

什麼是會話 當瀏覽器發請求訪問伺服器開始,一直到訪問伺服器結束,瀏覽器關閉為止,這期間瀏覽器和伺服器之間產生的所有請求和響應加在一起,就稱之為瀏覽器和伺服器之間的一次會話。在一次會話中往往會產生一些資料,而這些資料往往是需要我們儲存起來的,如何儲存會話中產生的這些資料呢?可以使用cookie或者se...

Drools的基本使用和原理

load up the knowledge base knowledgebase kbase readknowledgebase statefulknowledgesession ksession kbase.newstatefulknowledgesession itemcity item1 ne...