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中assert用法实例分析
Apr 30 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
pycharm设置注释颜色的方法
May 23 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
python覆盖写入,追加写入的实例
Jun 26 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
详解Python为什么不用设计模式
Jun 24 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的安全策略
2006/10/09 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php检测useragent版本示例
2014/03/24 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
Laravel实现表单提交
2017/05/07 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP强制转化的形式整理
2020/05/22 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
python 数据加密代码
2008/12/24 Python
Python中IPYTHON入门实例
2015/05/11 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python字符串下标与切片及使用方法
2020/02/13 Python
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
体育老师的教学自我评价分享
2013/11/19 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
专家推荐信模板
2014/05/09 职场文书
二年级学生期末评语
2014/12/26 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL