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中常用的各种数据库操作模块和连接实例
May 29 Python
python处理csv数据的方法
Mar 11 Python
Python中的进程分支fork和exec详解
Apr 11 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
wxPython色环电阻计算器
Nov 18 Python
python基于socket函数实现端口扫描
May 28 Python
Python函数参数定义及传递方式解析
Jun 10 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 Python
python套接字socket通信
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实现采集程序原理和简单示例代码
2007/03/18 PHP
php ios推送(代码)
2013/07/01 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
浅谈Python 的枚举 Enum
2017/06/12 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
python 画条形图(柱状图)实例
2020/04/24 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
客户答谢会致辞
2015/07/30 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python