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利用正则表达式提取字符串
Dec 08 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
Python和Go语言的区别总结
Feb 20 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python retrying模块的使用方法详解
Sep 25 Python
django框架F&amp;Q 聚合与分组操作示例
Dec 12 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
使用python的pyplot绘制函数实例
Feb 13 Python
Python configparser模块操作代码实例
Jun 08 Python
Python3读写ini配置文件的示例
Nov 06 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模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
python的pip安装以及使用教程
2018/09/18 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
入党积极分子思想汇报
2014/01/02 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
安全施工标语
2014/06/07 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
聊聊Python String型列表求最值的问题
2022/01/18 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS