利用cookies获取登录后的网页
众所周知,HTTP连接是无状态的,那么问题来了,怎么记录用户的登录信息呢?通常的做法是用户第一次发送HTTP请求时,在HTTP Server端生成一个SessionID,SessionID会对应每个会话的状态(比如是否登录,等等),并且将SessionID保存在浏览器的cookies中。我们登录一个网页后,打开另外一个窗口访问相同的网页不需要登录,就是因为两个网页都对应同一个cookies。
有时在做python爬虫时,需要访问登录后才可以访问的网页,利用已经登录的cookie文件就可以达到此目的。下面以迅雷网为例来做实验,实验平台为Linux。
1. 首先在Firefox浏览器端登录迅雷网,使用Firebug插件导出cookies。
2. 修改cookies的格式,假设文件名为xunlei.txt,正确的格式如下:
# Netscape HTTP Cookie File.
# Generated by Wget on -- ::.
# Edit at your own risk. .dynamic.i.xunlei.com TRUE / FALSE __utma 74633479.1276576155.1435422349.1435422349.1435422349.1
.i.xunlei.com TRUE / FALSE __utma 112570076.1792933177.1435422325.1435422325.1435422325.1
.dynamic.i.xunlei.com TRUE / FALSE __utmb 74633479.1.10.1435422349
.i.xunlei.com TRUE / FALSE __utmb 112570076.1.10.1435422325
.dynamic.i.xunlei.com TRUE / FALSE __utmc
.i.xunlei.com TRUE / FALSE __utmc
.i.xunlei.com TRUE / FALSE __utmt
.dynamic.i.xunlei.com TRUE / FALSE __utmz 74633479.1435422349.1.1.utmcsr=i.xunlei.com|utmccn=(referral)|utmcmd=referral|utmcct=/login.html
.i.xunlei.com TRUE / FALSE __utmz 112570076.1435422325.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
dynamic.i.xunlei.com FALSE / FALSE __xltjbr
dynamic.i.xunlei.com FALSE / FALSE _s19 1435770994546b1435422324953b2bhttp%3A//dynamic.i.xunlei.com/user
# cookies行数比较多,就不写了,有三个地方注意:
# 1.第一行不能少,并且一个字符都不能错。
# 2.格式要严格为(空白处为TAB):
域 [TRUE或FALSE] / [TRUE或FALSE] 过期时间戳 名称 内容
3. 使用python代码读取xunlei.txt,并访问登录后才能访问的网页,例如:http://dynamic.i.xunlei.com/user
下面为源代码:
import cookielib, urllib2 cookie = cookielib.MozillaCookieJar()
cookie.load("xunlei.txt")
handle=urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handle)
urllib2.install_opener(opener) url = "http://dynamic.i.xunlei.com/user"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
print response.read()
4. 打印出来的代码即为我登录后,在http://dynamic.i.xunlei.com/user看到的内容。
以上的原理与CSRF攻击的原理类似,CSRF攻击的就是利用非法获得用户cookies,伪装成用户进行操作。针对这种攻击,web站点可以生成token,HTTP Server会验证每次请求的token,来避免CSRF攻击,例如Django的CsrfViewMiddleware。
但是token依然被放在了cookies中,依然可以进行CSRF攻击,只不过攻击的方式复杂了些。
利用cookies获取登录后的网页的更多相关文章
- Postman接口测试:自动获取登录后的cookie并设置环境变量
在对网站进行接口测试的时候,很多请求往往是需要带登录的cookie才能请求成功的,一般来说,可以用抓包软件(fiddler,浏览器的F12)来查看登录后的cookie,并把它设置到postman的环境 ...
- Jmeter通过正则表达式获取登录后token
1.引用名称:即参数化,便于后面调用登录后获取的token 2.正则表达式:"token":"([0-9 a-z -]+?)" 3.模板:设置为 "$ ...
- 接口测试,获取登录后的cookies
参见: http://www.cnblogs.com/testwang/p/6023394.html
- c#使用WebClient登录网站抓取登录后的网页
C#登录网站实际上就是模拟浏览器提交表单,然后记录浏览器响应返回的会话Cookie值,再次发送请求时带着这个会话cookie值去请求就可以实现模拟登录的效果了. 如下类CookieAwareWebCl ...
- Python3.6下的Requests登录及利用Cookies登录
利用Python中的Requests模块可以实现Post,Get等发送功能,我以登录某网站为例,记录使用Post发送用户名.密码及图形验证码,以及通过Cookies直接登录的内容. 1.利用POST发 ...
- Python手动构造Cookie模拟登录后获取网站页面内容
最近有个好友让我帮忙爬取个小说,这个小说是前三十章直接可读,后面章节需要充值VIP可见.所以就需要利用VIP账户登录后,构造Cookie,再用Python的获取每章节的url,得到内容后再使用 PyQ ...
- 第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
一. 引言 在<第14.3节 使用google浏览器获取网站访问的http信息>和<第14.4节 使用IE浏览器获取网站访问的http信息>中介绍了使用Google浏览器和IE ...
- php 微信登录 公众号 获取用户信息 微信网页授权
php 微信登录 公众号 获取用户信息 微信网页授权 先自己建立两个文件: index.php 和 getUserInfo.php index.php <?php //scope=snsap ...
- 有关利用python获取网页, 以及KDD近几年论文标题与摘要链接
最近一直在看KDD的论文,不过,由于老师并没有什么合理的方向性,所以考虑把kdd中的大部分内容都利用python将所有标题.摘要获取下来. 还有一个原因在于,看acm上的摘要,都只显示了两行,再看多点 ...
随机推荐
- Realm
还在为数据库不能获取最新数据而犯愁?信我,你只是需要一个活着的数据库——Realm 写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里 ...
- 栈应用之中缀表达式计算 MFC实现(计算器核心)
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 支持小数.阶乘.乘方.加减乘除.括号优先级运算,美化输出结果(显示结果末尾没有多余的0) void ...
- 什么是dtd文件,为什么需要dtd
DTD为英文Document Type Definition,中文意思为"文档类定义".DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许 ...
- WORD-如何解除WORD文档的锁定
Word文档保护破解 般来说WORD文档有两种密码打开密码和文档保护密码下面介绍几种破解文档保护密码方法 方法1:插入文件法 启动WORD新建空白文档执行插入→文件打开插入文件对框定位需要解除保护文档 ...
- 关于cookie, iphone及chrome的异同
http://www.blogjava.net/jjshcc/archive/2010/06/13/323517.html http://stackoverflow.com/questions/295 ...
- 猎豹上市(猎豹的广告收入中有70%来自BAT三家公司,总收入中有58%来自BAT)
发表日期: 2014 年 5 月 9 日 From 网易专题 文/赵楠 村里那点儿事 猎豹移动上市之夜,我挺激动. 激动除了因为有好朋友在这家公司外,也因为猎豹移动在历史上的几次起承转合非常不易,在巨 ...
- 提高效率的便签By番茄时间管理 win7标签,小功能,大作用
今日待办 把一些重要的事情,列入其中. 着重处理. 活动清单 罗列一些最近需要做的事情,不一定按照紧急重要的程度. 把活动清单中的事情,按照实际情况,安排到今日待办当中. 还有一个我喜欢的'头脑风暴' ...
- OpenWrt openssl library
Please install the openssl library (with development headers) sudo apt-get install libssl; rite fail ...
- 笔试、面试重点总结:WIN32、MFC与Linux
win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...
- Linux各种包安装及命令
1.Locate yum -y install mlocate 若出现问题: locate: can not stat () `/var/lib/mlocate/mlocate.db': 没有那个文件 ...