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语言实现将图片转化为html页面
Dec 06 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
python字符串替换re.sub()实例解析
Feb 09 Python
Python类中self参数用法详解
Feb 13 Python
Python中格式化字符串的四种实现
May 26 Python
简单的Python人脸识别系统
Jul 14 Python
一文详述 Python 中的 property 语法
Sep 01 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
如何利用python生成MD5并去重
Dec 07 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微信开发之模板消息回复
2016/06/24 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
Javascript中的数学函数
2007/04/04 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
小区门卫岗位职责
2013/12/31 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python