python爬取公众号历史文章_python爬微信公众号前10篇历史文章(6)-话说http cookies...
早期Web開(kāi)發(fā)面臨的最大問(wèn)題之一是如何管理狀態(tài)。簡(jiǎn)言之,服務(wù)器端沒(méi)有辦法知道兩個(gè)請(qǐng)求是否來(lái)自于同一個(gè)瀏覽器。這是cookies的起源。
什么是cookie?
A cookie is a small stub of information left by a website on a visitor's computer through the web browser.
一個(gè)cookie就是存儲(chǔ)在用戶(hù)主機(jī)瀏覽器中的一小段文本文件。Cookies是純文本形式,它們不包含任何可執(zhí)行代碼。存儲(chǔ)cookie是瀏覽器的功能。
基于一系列規(guī)則在之后的每個(gè)請(qǐng)求中都將該信息返回至服務(wù)器。Web服務(wù)器之后可以利用這些信息來(lái)標(biāo)識(shí)用戶(hù)。
設(shè)置一個(gè)cookie,之后只要這個(gè)cookie存在并且合法,你就可以自由的瀏覽這個(gè)站點(diǎn)的所有部分。當(dāng)網(wǎng)頁(yè)要發(fā)http請(qǐng)求時(shí),瀏覽器會(huì)先檢查是否有相應(yīng)的cookie,有則自動(dòng)添加在request header中的cookie字段中。
再次,cookie只是包含了數(shù)據(jù),就其本身而言并不有害。
每個(gè)域名下的cookie 的大小最大為4KB,每個(gè)域名下的cookie數(shù)量最多為20個(gè)(但很多瀏覽器廠(chǎng)商在具體實(shí)現(xiàn)時(shí)支持大于20個(gè))。
cookie通信:
request header中自動(dòng)添加了Cookie字段(我并沒(méi)有手動(dòng)添加這個(gè)字段哦~),Cookie字段的值其實(shí)就是我設(shè)置的?cookie。這個(gè)請(qǐng)求最終會(huì)發(fā)送到http://ppsc.sankuai.com這個(gè)服務(wù)器上,這個(gè)服務(wù)器就能從接收到的request header中提取cookie。
cookie的基本通信流程:設(shè)置cookie?=>?cookie被自動(dòng)添加到request header中 => 服務(wù)端接收到cookie
cookie的構(gòu)成:
set cookie: name=value; domain=.mozilla.org; expires=Feb, 13-Mar-2018 11:47:50; path=/; secure
名稱(chēng)(name):一個(gè)唯一確定cookie的名稱(chēng),部分大小寫(xiě),cookie的名字必須是經(jīng)過(guò)URL編碼的,一般可以采用某個(gè)前綴在加上當(dāng)前時(shí)間的做法,這樣的話(huà)名稱(chēng)能夠確保是唯一的,也比較方便。
值(value):存儲(chǔ)在cookie中的字符串值,必須經(jīng)過(guò)被URL編碼
失效時(shí)間(expires):表示cookie何時(shí)應(yīng)該被刪除的時(shí)間戳,這個(gè)日期是GMT格式的日期,如果設(shè)置是以前的時(shí)間,cookie會(huì)被立刻刪除。上訴cookie的失效時(shí)間是Feb,13-Mar-2018 11:47:50。
域(domain):對(duì)于哪個(gè)域是有效的,如果沒(méi)有設(shè)置的話(huà),默認(rèn)來(lái)自設(shè)置cookie的那個(gè)域,在上訴例子中就是.Mozilla.org
路徑(path):指定域中的那個(gè)路徑應(yīng)該像服務(wù)器發(fā)送cookie,/ 表示沒(méi)有限制。path默認(rèn)值為設(shè)置該cookie的網(wǎng)頁(yè)所在的目錄。domain和path2個(gè)選項(xiàng)共同決定了cookie何時(shí)被瀏覽器自動(dòng)添加到請(qǐng)求頭部中發(fā)送出去。
安全標(biāo)志(secure):指定以后,cookie只有在使用SSL連接的時(shí)候才可以發(fā)送到服務(wù)器。
expires?是 http/1.0協(xié)議中的選項(xiàng),在新的http/1.1協(xié)議中expires已經(jīng)由?max-age?選項(xiàng)代替,兩者的作用都是限制cookie 的有效時(shí)間。expires的值是一個(gè)時(shí)間點(diǎn)(cookie失效時(shí)刻= expires),而max-age?的值是一個(gè)以秒為單位時(shí)間段(cookie失效時(shí)刻= 創(chuàng)建時(shí)刻+ max-age)。
另外,max-age?的默認(rèn)值是?-1(即有效期為?session?);若max-age有三種可能值:負(fù)數(shù)、0、正數(shù)。負(fù)數(shù):有效期session;0:刪除cookie;正數(shù):有效期為創(chuàng)建時(shí)刻+ max-age
設(shè)置cookie:
cookie既可以由服務(wù)端來(lái)設(shè)置,也可以由客戶(hù)端來(lái)設(shè)置。
服務(wù)端設(shè)置 cookie:?不管你是請(qǐng)求一個(gè)資源文件(如 html/js/css/圖片),還是發(fā)送一個(gè)ajax請(qǐng)求,服務(wù)端都會(huì)返回response。而response header中有一項(xiàng)叫set-cookie,是服務(wù)端專(zhuān)門(mén)用來(lái)設(shè)置cookie的。一個(gè)set-Cookie字段只能設(shè)置一個(gè)cookie,當(dāng)你要想設(shè)置多個(gè) cookie,需要添加同樣多的set-Cookie字段。
客戶(hù)端設(shè)置 cookie:在網(wǎng)頁(yè)即客戶(hù)端中我們也可以通過(guò)js代碼來(lái)設(shè)置cookie。
document.cookie="age=12; expires=Thu, 26 Feb 2116 11:50:25 GMT; domain=sankuai.com; path=/";
cookie的應(yīng)用:
購(gòu)物車(chē)(網(wǎng)購(gòu))
自動(dòng)登錄(登錄賬號(hào)時(shí)的自動(dòng)登錄)
精準(zhǔn)廣告
平常瀏覽網(wǎng)頁(yè)時(shí)有時(shí)會(huì)推出商品剛好是你最近瀏覽過(guò),買(mǎi)過(guò)的類(lèi)似東西,這些是通過(guò)cookie記錄的。
記住登錄狀態(tài)
python request模塊提供的cookie相關(guān)內(nèi)容:
請(qǐng)求會(huì)話(huà):class?requests.Session
Provides cookie persistence, connection-pooling, and configuration.
創(chuàng)建一個(gè)會(huì)話(huà)之后,可以訪(fǎng)問(wèn)它的CookieJar,它保存了所有這個(gè)會(huì)話(huà)中的cookie信息。
在發(fā)送請(qǐng)求的header中設(shè)置cookie信息:
session.get(url, headers= '{'Cookie':'SUV=43BBE548642E940A000000005AA1D6FD;SNUID=21D9862A6266048D992B9AFC635824EB;'})
總結(jié)
以上是生活随笔為你收集整理的python爬取公众号历史文章_python爬微信公众号前10篇历史文章(6)-话说http cookies...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kali怎么新建文本_甘特图怎么画?零基
- 下一篇: 生鲜配送小程序源码_生鲜配送小程序开发