在**中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料(cookie)給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的cookie資料自動的攜帶給伺服器,伺服器通過瀏覽器攜帶的資料就能判斷當前使用者是哪個了。cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4kb。因此使用cookie只能儲存一些小量的資料。
set-cookie: name=value;expires/max-age=date;path=path;domain=domain_name;securecookie是指**伺服器為了辨別使用者身份和進行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...