python中cookies怎么用_python中Cookies使用的几点总结

最近两个晚上在写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)

<[, ]>

下面的总结感谢此文章给的提示:为 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值给卡住了,差点就崩溃了啊,果然还是网上各种大神给力~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值