python模拟登录并且保持cookie的方法详解


Posted in Python onApril 04, 2017

前言

最近在爬行 nosec.org 的数据,看了下需要模拟登录拿到cookie后才能访问想抓的数据,重要的是 nosec.org 的登录页面 form 中有个 authenticity_token 字段每次访问登录页面都会自动生成,而且会和你的用户名,密码一样被POST到服务器。

经过一番研究后发现,直接访问网站登录界面的时候,服务器的响应头会有一个Set-Cookie字段,如下:

_nosec_session=ZTlHNmxuZXE4R0s1UXpsVUxGRTNPblNBWFd2TXU4TU9aNWVJM2lyLzNFY0pLeUdNMDY1cmZqanpkc0ppaGtjU
i9kTGdWenBrNXJKenNqbnN2YUxucE1DRW5UMHNTR1RxWDZPeGlLazllTmY1czVpYWplazJXdWkvZS9wUHJpc1Jya3ZzcmNVMytPR
it2T1dEcGx4bHNDTTVzSmVTb0xhSjRycE03QUl5RXE5Z2tZWG1mTHFBWGx1QW52QjBURi8rLS1acE8yeVRtMFRZR1JWdExneStwdmpRPT0
%3D--a6ccd9a12a8af5c8b5fb6625c24bb4db0398c503; path=/; HttpOnly

而且页面form 的表单有一个 authenticity_token 的 input ,内容如下:

<input type="hidden" name="authenticity_token" value="cGdhqVxDMRndpKbpvIV66wfEQlGf4Rz6UtXqsf79brEvFveHw2rCc6uz3euFEyUlpuA0azt5uNhnmrUiCaAyUg==" />

之前按照后端的逻辑分析_nosec_session 的值 经过解密以及各种xx手法得到 authenticity_token 的值,然后顺带着 username 和 password post就行了,最后发现这真是一个大写的傻逼!! 老是用后端的思维思考问题,过不得最近走路都走不好了。所以来,直接在页面中抓取已经生成的 authenticity_token 的值,然后 顺着 POST 过去就好了啊。

使用 requests 库 的 Session() 方法,确实很好用,比早期直接拿 cookielib 就干方便多了。

代码

类XXX 的 login 方法用来模拟登录,就贴出这部分登录的代码好了。

class XXX:
 def login(self):

  r = self.s.get('https://nosec.org/users/sign_in')
  html = r.text
  p1 = re.compile(r'city_token" value="(.*?)"')
  res = re.search(p1,html)
  authenticity_token = str(res.group(1))
  print 'authenticity_token:',authenticity_token
  # print 'cookies',self.s.cookies
  # print s.cookies
  data = {
   'authenticity_token':authenticity_token,
   'user[login]':'xxxxx',
   'user[password]':'xxxxx'
  }
  r = self.s.post('https://nosec.org/users/sign_in',data=data)
  # print r.headers
  # print r.request.headers
  # print self.s.cookies
  print '[*] OK!'
  return True

调用了 login 方法后 下次直接用self.s.get() 请求网页就会带着 cookie 啦。

之前被思路坑了一次,被笔误也坑了一次(https 写成 http),导致我抓狂了好久才发现这个 “BUG” = =、所以还得多谢 代码,提高排 Bug 的效率 2333!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中函数的多种格式和使用实例及小技巧
Apr 13 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
如何使用Python标准库进行性能测试
Jun 25 Python
Python中新式类与经典类的区别详析
Jul 10 Python
深入了解Python在HDA中的应用
Sep 05 Python
简单了解python数组的基本操作
Nov 26 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
python缩进长度是否统一
Aug 02 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
详解Python+OpenCV进行基础的图像操作
Feb 15 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 Python
python 容器总结整理
Apr 04 #Python
详解Python中最难理解的点-装饰器
Apr 03 #Python
JSON Web Tokens的实现原理
Apr 02 #Python
Python 40行代码实现人脸识别功能
Apr 02 #Python
Python可变参数用法实例分析
Apr 02 #Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 #Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 #Python
You might like
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python字典排序实例详解
2015/05/20 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python threading的使用方法解析
2019/08/28 Python
selenium如何定位span元素的实现
2021/01/13 Python
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
岗位职责的定义
2013/11/10 职场文书
歌唱比赛主持词
2014/03/18 职场文书
新学期开学标语
2014/06/30 职场文书
户籍证明格式
2014/09/15 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python