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自定义函数的创建、调用和函数的参数详解
Mar 11 Python
python中sets模块的用法实例
Sep 30 Python
玩转python爬虫之URLError异常处理
Feb 17 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python3使用matplotlib绘制散点图
Mar 19 Python
如何利用python给图片添加半透明水印
Sep 06 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
python批量修改文件名的示例
Sep 27 Python
如何用python识别滑块验证码中的缺口
Apr 01 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利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
详解js静态资源文件请求的处理
2017/08/01 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Python 初始化多维数组代码
2008/09/06 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
化学实验员岗位职责
2013/12/28 职场文书
会计助理岗位职责
2014/02/17 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
简易版租房协议书范本
2014/10/13 职场文书
公司档案管理制度
2015/08/05 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
MySQL空间数据存储及函数
2021/09/25 MySQL
Go语言基础map用法及示例详解
2021/11/17 Golang
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS