Python的Cookie详解

一、介绍啥是cookie

当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie,它是Internet站点创建的,为了辨别用户身份而储存在用户本地终端上的数据,cookie大部分都是加密的,cookie存在与缓存中或者硬盘中,在硬盘中的是一些文本文件,当你访问该网站时,就会读取对应的网站的cookie信息,cookie有效地提升了用户体验,一般来说,一旦将cookie保存在计算机上,则只有创建该cookie的网站才能读取它


二、cookielib模块

python中自带的模块,用来处理cookie相关事情

该模块的几个主要对象

  • CookieJar
  • FileCookieJar
  • MozillaCookieJar
  • LwpCookieJar
它们的关系

CookieJar——>派生——>FileCookieJar——>派生——>MozillaCookieJar和LwpCookieJar


三、urllib2自定义opener

因为urllib2.urlopen()函数不支持验证、cookie、HTTP高级功能等,所以如果要支持这些功能必须使用build_opener()函数

创建自定义opener对象

build_opener([headler1[headler2,...]])

headler是Handler实例,常用的有HTTPBasicAuthHandler,HTTPCookieProcessor,ProxyHandler等

headler是处理器,所有繁重工作有headler处理,每个headler知道如何通过特定协议打开URLs或者如何处理URL打开各个方面


四、获取cookie保存到变量

利用CookieJar对象实现cookie保存到变量中

下面是获取豆瓣的cookie保存到变量中
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/11/1
import urllib2
import cookielib

cookie=cookielib.CookieJar()#声明CookieJar对象实例来保存cookie
handler=urllib2.HTTPCookieProcessor(cookie)#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
opener=urllib2.build_opener(handler)#通过handler构建opener
opener.open(r'http://www.douban.com')
for item in cookie:
    print 'Name ='+item.name
    print 'Value ='+item.value
    print 'Domain ='+item.domain
    print 'path ='+item.path

这里写图片描述

上面方法将cookie保存到变量中,然后打印了cookie中的一些属性,如name,value,domain等等

以下是cookie的属性
name字段为一个cookie的名称。

value字段为一个cookie的值。

domain字段为可以访问此cookie的域名。

非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。

顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。

二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。
顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。

path字段为可以访问此cookie的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此cookie。

expires/Max-Age 字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。

Size字段 此cookie大小。

http字段  cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。

secure 字段 设置是否只能通过https来传递此条cookie

五、获取cookie保存到文件中

用到FileCookieJar对象的子类MozillaCookieJar来实现

filename='cookie.txt'#保存cookie的文件
cookie=cookielib.MozillaCookieJar(filename)#声明一个MozillaCookieJar对象实例(cookie)来保存cookie,后面写入文件
handler=urllib2.HTTPCookieProcessor(cookie)#还是创建处理器
opener=urllib2.build_opener(handler)#创建支持处理HTTP请求的opener对象
opener.open('http://www.douban.com')
cookie.save(ignore_discard=True,ignore_expires=True)#保存cookie到文件
#ignore_discard表示即使cookie将被丢弃也将保存下来,ignore_expires表示如果该文件中cookie已经存在,则覆盖原文件写入

这里写图片描述


六、从文件中获取cookie,并访问

cookie保存在自己本地文件,可从文件中获取cookie并对网站进行访问

cookie=cookielib.MozillaCookieJar()#声明CookieJar对象实例来保存cookie
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)#从文件中读取内容到cookie变量中
handler=urllib2.HTTPCookieProcessor(cookie)#处理器
opener=urllib2.build_opener(handler)
print opener.open('http://www.douban.com').read()

这里写图片描述

那么问题来了,可以发现cookie真的可以干很多事,把别人的登录的cookie保存下来,那就可以模拟登入他人的XXXXX

  • 17
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的requests库提供了一种方便的方法来进行HTTP请求。它遵循大部分HTTP和HTTPS协议,支持代理和cookie,并且具有很好的性能。 使用requests库发送HTTP请求通常需要以下步骤: 1. 准备请求: 创建HTTP请求对象,设置请求头,请求类型等。 2. 发送请求: 使用requests库发送HTTP请求。 3. 处理响应: 接收服务器的响应,并且进行解析。 4. 处理异常: 处理网络异常和客户端/服务器异常。 下面是一些requests库可以使用的常见方法: 1. requests.get(url, params=None, headers=None, cookies=None, verify=True): 发送HTTP GET请求,参数包括网址、URL参数、请求头、Cookie等。 2. requests.post(url, data=None, json=None, headers=None, cookies=None, verify=True): 发送HTTP POST请求,参数包括网址、上传的数据、请求头、Cookie等。 3. requests.put(url, data=None, json=None, headers=None, cookies=None, verify=True): 发送HTTP PUT请求,参数包括网址、上传的数据、请求头、Cookie等。 4. requests.delete(url, params=None, headers=None, cookies=None, verify=True): 发送HTTP DELETE请求,参数包括网址、URL参数、请求头、Cookie等。 5. requests.patch(url, data=None, headers=None, cookies=None, verify=True): 发送HTTP PATCH请求,参数包括网址、上传的数据、请求头、Cookie等。 6. requests.head(url, headers=None, cookies=None, verify=True): 发送HTTP HEAD请求,获取响应头部信息。 7. requests.options(url, headers=None, cookies=None, verify=True): 发送HTTP OPTIONS请求,获取响应头部信息、服务端支持的HTTP方法等。 以上是requests库的一些主要方法,它们可以满足大多数HTTP请求的需要。需要注意的是,使用requests库发送HTTP请求需要处理网络异常和客户端/服务器异常,以便保证程序的正确性和健壮性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值