程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> python中Cookies使用的幾點總結

python中Cookies使用的幾點總結

編輯:Python

最近兩個晚上在寫python查詢考試成績的客戶端,發現太虐心了啊。本身難度其實不大,核心內容就是各種POST和GET,當然還有BeautifulSoup的各種運用。但由於學校信息門戶和教務系統都是基於ASP.NET進行開發,而且各種接口不明確,所以今晚被cookies這一塊卡住了一個多小時= =具體的問題等程序寫好的時候再總結吧,今天主要總結cookies模塊的運用。

python 3.x之後,cookies的相關類被放到了http.cookies裡面,2.x具體放哪裡忘記了- -

使用SimpleCookie可以創建一個http頭部的cookie語句:
from http import cookies

C = cookies.SimpleCookie()
C["fig"] = "newton"
C["sugar"] = "wafer"

>>> print (C)

Set-Cookie: fig=newton
Set-Cookie: sugar=wafer


還可以給cookie指定參數,如:path、domain等:(所有參數:expires、path、comment、domain、max-age、secure、version、httponly)
from http import cookies

C = cookies.SimpleCookie()
C["test"] = "road"
C["test"]["path"] = "/"
C["test"]["domain"] = ".hack0nair.me"

>>> print (C)

Set-Cookie: test=road; path=/; domain=.hack0nair.me


更詳細的使用方法查看官方文檔:http.cookies

 

python一般用opener(urllib.request)去模擬一個浏覽器發送請求,同時python還提供了一個CookieJar的庫幫助我們管理cookies。只要在build_opener的時候加上CookieJar,那之後浏覽過程產生的cookies就由它進行管理了,我們根本不用關心它如何運行:
from urllib import request
from http import cookiejar

CJ = cookiejar.CookieJar() #創建cookiejar對象
OPENER = request.build_opener(request.HTTPCookieProcessor(CJ)) #創建opener對象,並把剛才創建的cookiejar放到opener裡面
request.install_opener(self._OPENER) #初始化opener


想要查看cookiejar中保存了哪些cookies,直接輸出即可:
from http import cookiejar

CJ = cookiejar.CookieJar()

...

>>> print (CJ)

<<class 'http.cookiejar.CookieJar'>[<Cookie iPlanetDirectoryPro=AQIC5wM2Lf89y3hr2hfDxVOrp2rg0GOpXeKJFgJjB7VrY%3D%40AAJTSQACMDI%3D%23 for .hack0nair.me/>, <Cookie ASP.NET_SessionId=sy3rdcqznb4fuio2f23rt45 for mail.hack0nair.me/>]>

 


下面的總結感謝此文章給的提示:為 Python 的 HTTP 客戶端加入自定義的 Cookie

很多時候我們都希望在發送請求的時候加入自定義cookie值,但是不管是 HTTPCookieProcessor 還是 cookielib 裡的 CookieJar 都沒有提供類似的方法可以來實現。解決方法是,寫一個handler,然後把想加入的cookie值強制加入到request對象的header中去。

所需要的handler如下:
from urllib import request

class SimpleCookieHandler(request.BaseHandler):
def http_request(self, req):
simple_cookie = 'LAST_PORTAL_PAGE=p346' #這裡填自定義cookie值
if not req.has_header('Cookie'):
req.add_unredirected_header('Cookie', simple_cookie) #如果header中cookie為空,則創建cookie對象並把cookie值放進去
else:
cookie = req.get_header('Cookie')
req.add_unredirected_header('Cookie', simple_cookie + '; ' + cookie) #如果header中已經存在cookie,則把自定義cookie插到已有cookie的末尾
return req


然後,構造 opener 的時候加上這個 handler 就可以了:
from urllib import request

opener = request.build_opener(request.HTTPCookieProcessor(), SimpleCookieHandler())


PS.剛才就是在寫客戶端的時候被自定義cookie值給卡住了,差點就崩潰了啊,果然還是網上各種大神給力~
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved