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 pass 语句使用示例
Mar 11 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python实现登陆文件验证方法
Oct 06 Python
Python骚操作之动态定义函数
Mar 26 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
Python基础之数据结构详解
Apr 28 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/11/19 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
python str与repr的区别
2013/03/23 Python
python多重继承实例
2014/10/11 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python实现门限回归方式
2020/02/29 Python
python实现密码强度校验
2020/03/18 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
介绍一下木马病毒的种类
2015/07/26 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
教师求职自荐信
2014/03/09 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
应届生求职信
2014/05/31 职场文书
房产公证书样本
2015/01/23 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电