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中的join()函数的用法
Apr 07 Python
python并发2之使用asyncio处理并发
Dec 21 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python requests证书问题解决
Sep 05 Python
wxPython实现画图板
Aug 27 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Python手拉手教你爬取贝壳房源数据的实战教程
May 21 Python
Python利用FlashText算法实现替换字符串
Mar 31 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
Symfony页面的基本创建实例详解
2015/01/26 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
jQuery设计思想
2017/03/07 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
koa-router源码学习小结
2018/09/07 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
分享python数据统计的一些小技巧
2016/07/21 Python
Python中格式化format()方法详解
2017/04/01 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
html5的localstorage详解
2017/05/09 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
采购类个人求职的自我评价
2014/02/18 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
室内趣味活动方案
2014/08/24 职场文书
法人委托书的范本格式
2014/09/11 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Python OpenCV快速入门教程
2021/04/17 Python
浅谈Python中的正则表达式
2021/06/28 Python