python处理cookie详解


Posted in Python onFebruary 07, 2014

要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头:

Set-Cookie:session=8345234;expires=Sun,15-Nov-2013 15:00:00 GMT;path=/;domain=baidu.com

expires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域.

路径"path"用于设置可以读取一个cookie的最顶层的目录.

将cookie的路径设置为你的网页最顶层的目录可以让该该目录下的所有网页都能访问该cookie.

方法:在你的cookie中加入path=/; 如果你只想让"food" 目录中的网页可以使用该cookie,则你加入path=/food;.

domain:有些网站有许多小的域名,例如百度可能还在"news.baidu.com" "zhidao.baidu.com" 和"v.baidu.com" 域名下有网页.

如果想让"baidu.com"下的所有机器都可以读取该cookie,必须在cookie中加入 "domain=.baidu.com" .

用户浏览器会存储Cookie直到过期,浏览器会向符合path和domain的服务器发送类似以下内容的HTTP请求报头:

Cookie:session=8345234。

例如,登陆www.baidu.com的时候,百度服务器发送回的HTTP响应报头中cookie是:

Set-Cookie:H_PS_PSSID=4681_4567_1452_9876_4759; path=/; domain=.baidu.com
Set-Cookie:BDSVRTM=74; path=/

浏览器的HTTP请求报头:

Cookie:BAIDUID=0FD996SDFG12********107B9C227F4C:FG=1; locale=zh; bdshare_firstime=1384567418140; NBID=D830DD2345HH2818A9F4134E5A2D778D3B:FG=1; H_PS_LC=4_shadu2014; BD_CK_SAM=1; H_PS_PSSID=4681_4567_1452_9876_4759

浏览器将cookie发送回HTTP服务器时,使用key=value字符串的编码形式,不返回expires,path和domain等可选属性。

cookie字符串通常位于HTTP_COOKIE环境变量中,可以如下读取:

import os
print "Content-type: text/plain\n"
if "HTTP_COOKIE" in os.environ:
    print os.environ["HTTP_COOKIE"]
else:
    print "HTTP_COOKIE not set!"

Python中Cookie模块(python2,python3中为http.cookies)提供了一个类似字典的特殊对象SimpleCookie,其中存储并管理着称为Morsel的cookie值集合。

每个Morsel都有name,value以及可选属性(expires,path,domain,comment,max-age,secure,version,httponly)。

SimpleCookie可使用output()方法创建以HTTP报头形式表示的cookie数据输出,用js_output()方法生成包含javascript代码的字符串。

用HTTP_COOKIE生成cookie:

cookie=Cookie.SimpleCookie(os.environ['HTTP_COOKIE'])
print cookie.output()

set cookie:

import Cookie
import datetime
import randomexpiration = datetime.datetime.now() + datetime.timedelta(days=30)
cookie = Cookie.SimpleCookie()
cookie["session"] = random.randint(1,1000000000)
cookie["session"]["domain"] = ".baidu.com"
cookie["session"]["path"] = "/"
cookie["session"]["expires"] = expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")
print "Content-type: text/plain"
print cookie.output()
print
print "Cookie set with: " + cookie.output()

输出:

Content-type: text/plain
Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/
Cookie set with: Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/

Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持。

该模块主要功能是提供可存储cookie的对象。使用此模块捕获cookie并在后续连接请求时重新发送,还可以用来

处理包含cookie数据的文件。

这个模块主要提供了这几个对象,CookieJar,FileCookieJar,MozillaCookieJar,LWPCookieJar。

CookieJar对象存储在内存中。

>>> import urllib2
>>> import cookielib
>>> cookie=cookielib.CookieJar()
>>> handler=urllib2.HTTPCookieProcessor(cookie)
>>> opener=urllib2.build_opener(handler)
>>> opener.open('http://www.google.com.hk')<addinfourl at 161806444 whose fp = <socket._fileobject object at 0x9a348ac>>

访问google的cookie已经被捕捉了。

来看下是怎样的:

>>> print cookie
<cookielib.CookieJar[<Cookie NID=67=B6YQoEIEjcqDj-adada_WmNYl_JvADsDEDchFTMtAgERTgRjK452ko6gr9G0Q5p9h1vlmHpCR56XCrWwg1pv6iqhZnaVlnwoeM-Ln7kIUWi92l-X2fvUqgwDnN3qowDW for .google.com.hk/>, <Cookie PREF=ID=7ae0fa51234ce2b1:FF=0:NW=1:TM=1391219446:LM=1391219446:S=cFiZ5X8ts9NY3cmk for .google.com.hk/>]>

看来是Cookie实例的集合,Cookie实例有name,value,path,expires等属性:

>>> for ck in cookie:
...     print ck.name,':',ck.value
... 
NID : 67=B6YQoEIEjcqDj-adada_WmNYl_JvADsDEDchFTMtAgERTgRjK452ko6gr9G0Q5p9h1vlmHpCR56XCrWwg1pv6iqhZnaVlnwoeM-Ln7kIUWi92l-X2fvUqgwDnN3qowDW
PREF : ID=7ae0fa51234ce2b1:FF=0:NW=1:TM=1391219446:LM=1391219446:S=cFiZ5X8ts9NY3cmk

也可以将cookie捕捉到文件中。

FileCookieJar(filename)

创建FileCookieJar实例,检索cookie信息并将信息存储到文件中,filename是文件名。

MozillaCookieJar(filename)

创建与Mozilla cookies.txt文件兼容的FileCookieJar实例。

LWPCookieJar(filename)

创建与libwww-perl Set-Cookie3文件兼容的FileCookieJar实例。

代码:

import urllib2
import cookielib
def HandleCookie():
     #handle cookie whit file
     filename='FileCookieJar.txt'
     url='http://www.google.com.hk'
     FileCookieJar=cookielib.LWPCookieJar(filename)
     FileCookeJar.save()
     opener =urllib2.build_opener(urllib2.HTTPCookieProcessor(FileCookieJar))
     opener.open(url)
     FileCookieJar.save()
     print open(filename).read() 
     #read cookie from file
     readfilename = "readFileCookieJar.txt"
     MozillaCookieJarFile =cookielib.MozillaCookieJar(readfilename)
     print MozillaCookieJarFile        
     MozillaCookieJarFile.load(cookieFilenameMozilla)
     print MozillaCookieJarFile
 if __name__=="__main__":
     HandleCookie()
Python 相关文章推荐
跟老齐学Python之Python安装
Sep 12 Python
python距离测量的方法
Mar 06 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
django foreignkey(外键)的实现
Jul 29 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
python如何查看安装了的模块
Jun 23 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
基于python实现复制文件并重命名
Sep 16 Python
urllib2自定义opener详解
Feb 07 #Python
python解析html开发库pyquery使用方法
Feb 07 #Python
python3.3实现乘法表示例
Feb 07 #Python
zbar解码二维码和条形码示例
Feb 07 #Python
python命令行参数sys.argv使用示例
Jan 28 #Python
python删除文件示例分享
Jan 28 #Python
python list转dict示例分享
Jan 28 #Python
You might like
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php Undefined index的问题
2009/06/01 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
python 运算符 供重载参考
2009/06/11 Python
python实现ip查询示例
2014/03/26 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Python 从attribute到property详解
2020/03/05 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
法制宣传标语集锦
2014/06/25 职场文书
2015员工年度考核评语
2015/03/25 职场文书