Python HTTP客户端自定义Cookie实现实例


Posted in Python onApril 28, 2017

Python HTTP客户端自定义Cookie实现实例

几乎所有脚本语言都提供了方便的 HTTP 客户端处理的功能,Python 也不例外,使用 urllib 和 urllib2 可以很方便地进行 HTTP GET 和 POST 等各种操作。并且还允许以类似于插件的形式加入一些 handler ,来定制 request 和 response ,比如代理的支持和 cookie 的支持都是这样添加进来的。具体来说,通过如下方式构造一个 opener :

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())

然后这个 opener 就可以处理 cookie 了,相当方便,并且可定制性也……好吧,总之,现在我希望能在客户端手动插入一些 cookie 值,但是不管是 HTTPCookieProcessor 还是 cookielib 里的 CookieJar 都没有提供类似的方法可以来实现。

看起来,也并不是我一个人有这样的需求,因为我在查找解决方案的时候,还找到了有人给 Python 提交的这个 Patch,就是添加这个功能。不过看起来好像还没有被 accept 的样子,这样对标准库做暴力 patch 的方式可移植性似乎也不好。所以我还是另外找了解决方案,其实也很简单:看了 HTTPCookieProcessor 的实现代码之后,发现我可以做类似的事情,也就是在写一个 handler ,把我想要的 cookie 值强制放到 request 对象的 header 中去。

于是我查了 Python 的文档,对于 handler 的接口好像几乎没有描述,于是我就照着 HTTPCookieProcessor 来写了。这个 handler 应该放在正常的 cookie 处理 handler 的后面,然后检查已经存在的 cookie header ,再进行合并一下。不过比较诡异的是在 Python 的文档里并没有找到 Request 对象有 get_header 之类的方法可以得到已经存在的 header 项的值,觉得很诡异,于是直接查了源代码,才找到了,确实有这个方法。之前有听人说过 Ruby 的文档做得如何如何的烂,Python 的文档做得如何如何的好,我虽然没觉得 Ruby 的文档很烂,但是也觉得 Python 的文档确实不错,我最喜欢它末尾的 Examples 。两个文档系统倒是走的不同的路,Ruby 的文档是从代码中抽取(特定格式的)注释来自动生成的,类似于 javadoc ;而 Python 现在用的是独立于源代码的文档系统,人工写的,不过到头来居然连函数都漏掉了,可见人工维护文档的弊端还是很明显的。其实我见过的文档系统,最好用的应该还是属于 Emacs/Elisp 了吧。 不过,废话少讲,handler 如下:

class SimpleCookieHandler(urllib2.BaseHandler):
 def http_request(self, req):
  simple_cookie = 'cc98Simple=1'
  if not req.has_header('Cookie'):
   req.add_unredirected_header('Cookie', simple_cookie)
  else:
   cookie = req.get_header('Cookie')
   req.add_unredirected_header('Cookie', simple_cookie + '; ' + cookie)
  return req

然后,构造 opener 的时候加上这个 handler 就可以了:

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

但总归是一个 workaround ,期待那个 patch 被加入到标准库中吧。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python生成指定尺寸缩略图的示例
May 07 Python
2款Python内存检测工具介绍和使用方法
Jun 01 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python 排序算法总结及实例详解
Sep 28 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
Python3并发写文件与Python对比
Nov 20 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
django创建css文件夹的具体方法
Jul 31 Python
详解Python 中的容器 collections
Aug 17 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python 通过pip安装Django详细介绍
Apr 28 #Python
python 使用get_argument获取url query参数
Apr 28 #Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 #Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 #Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 #Python
用pickle存储Python的原生对象方法
Apr 28 #Python
Python标准库之collections包的使用教程
Apr 27 #Python
You might like
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
python处理json数据中的中文
2014/03/06 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
大学生学习自我评价
2014/01/13 职场文书
留学推荐信中文范文三篇
2014/01/25 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
趣味体育活动方案
2014/02/08 职场文书
团干部培训方案
2014/06/03 职场文书
自我检讨书范文
2015/01/28 职场文书
九华山导游词
2015/02/03 职场文书