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+mysql实现简单的web程序
Sep 11 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
python分割列表(list)的方法示例
May 07 Python
Python时间戳使用和相互转换详解
Dec 11 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
django的csrf实现过程详解
Jul 26 Python
简单了解python变量的作用域
Jul 30 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
python 伯努利分布详解
Feb 25 Python
django列表筛选功能的实现代码
Mar 27 Python
使用python实现时间序列白噪声检验方式
Jun 03 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
JS input 数字验证代码
2009/07/30 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
详解webpack babel的配置
2018/01/09 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python自动格式化json文件的方法
2015/03/11 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python增加图像对比度的方法
2019/07/12 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
MADE法国:提供原创设计师家具
2018/09/18 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
Java程序员面试题
2013/07/15 面试题
迟到检讨书500字
2014/02/05 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书