python简单模拟登陆详解
2016-12-30 16:41
302 查看
要进行模拟登陆,那么我们首先要了解下http协议,这里我们简单介绍一下,方便后面的模拟登陆。
http协议属于应用层的面向对象协议
主要功能用来传输页面,所以传输页面有他特定的规则,
我们了解他的规则 实现多线程批量注册、投票、调到、发帖、都是可行的,网页除了Flash模块不能操作以外,其他Dom页面元素节点都可以操作。
url地址解析:http://host[“:”post][abs_path]
host是主机地址,由域名解析主机ip,所以输入域名的时候也能找到服务器
port是端口号,浏览器默认80端口。如:baidu.com:80
abs_path:是文件的路径 类似于我们访问文件夹一样
有时候我们会在后面看到’?’,问号后面有一些东西,通过’=’来传值,这个是传递给服务器的参数。比如 访问一篇文章总要知道那篇文章的ID一样 例如:
百度后面传递了id属性 值为utf-8
r https://www.baidu.com/s?ie=utf-8
url我们了解了之后,我们来说下用户[浏览器]请求服务器
它的请求方式有很多比如我们经常说的get和post其他后续用不到。
get简单来说就是获取属性,聚义获取什么数据需要通过url和问号后面传递的参数来定
post也是获取数据,但是可以传递数据到服务器,比如传递账号、密码、验证码等等。
两者还有不同的是:
get传递参数的时候是在url后面添加问号来传递,后台服务器接收。Django可以看不到问号传递参数
post是饮食提交给服务器,也就是说用户浏览器是看不到的,而且为了安全,有的密码还会通过js一些算法加密。
协议头(请求头)
在请求之后,会有一些特定的请求头数据,通过F12抓包功能可以查看
这是一个简单的头信息,在User-Agent中可以看到有 系统版本、浏览器版本及核心,还有Accept-Encoding中后面使用的gzip请求压缩页面返回,一般写代码里会把它删掉,避免返回压缩后的网页,还要解压(有的会自动解压缩)
了解了这些,我们可以开始实战了。
通过谷歌浏览器,自带的F12自带的Network抓包工具进行请求抓取
POST登录的数据包:
中间请求头我们不用管看最后的data中的数据:
1. username 账号 我登陆前输入的账号
2. password 密码 我登陆输入的密码
POST成功返回响应头中set-cookie最后GET首页中添加这些Cookue来完成登录,我们来写入python试试
通过pip安装这个模块
为了避免卡死shell我们可以使用ipython shell来进行打印,发现还是现实不全,我们还是写到文件吧
以上就是一个简单的模拟登陆的详细过程,还有更复杂的,比如验证码什么的,以后会给大家慢慢分享。
http协议属于应用层的面向对象协议
主要功能用来传输页面,所以传输页面有他特定的规则,
我们了解他的规则 实现多线程批量注册、投票、调到、发帖、都是可行的,网页除了Flash模块不能操作以外,其他Dom页面元素节点都可以操作。
url地址解析:http://host[“:”post][abs_path]
host是主机地址,由域名解析主机ip,所以输入域名的时候也能找到服务器
port是端口号,浏览器默认80端口。如:baidu.com:80
abs_path:是文件的路径 类似于我们访问文件夹一样
有时候我们会在后面看到’?’,问号后面有一些东西,通过’=’来传值,这个是传递给服务器的参数。比如 访问一篇文章总要知道那篇文章的ID一样 例如:
百度后面传递了id属性 值为utf-8
r https://www.baidu.com/s?ie=utf-8
url我们了解了之后,我们来说下用户[浏览器]请求服务器
它的请求方式有很多比如我们经常说的get和post其他后续用不到。
get简单来说就是获取属性,聚义获取什么数据需要通过url和问号后面传递的参数来定
post也是获取数据,但是可以传递数据到服务器,比如传递账号、密码、验证码等等。
两者还有不同的是:
get传递参数的时候是在url后面添加问号来传递,后台服务器接收。Django可以看不到问号传递参数
post是饮食提交给服务器,也就是说用户浏览器是看不到的,而且为了安全,有的密码还会通过js一些算法加密。
协议头(请求头)
在请求之后,会有一些特定的请求头数据,通过F12抓包功能可以查看
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:zh-CN,zh;q=0.8 Connection:keep-alive Host:www.discuz.net Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36
这是一个简单的头信息,在User-Agent中可以看到有 系统版本、浏览器版本及核心,还有Accept-Encoding中后面使用的gzip请求压缩页面返回,一般写代码里会把它删掉,避免返回压缩后的网页,还要解压(有的会自动解压缩)
了解了这些,我们可以开始实战了。
分析页面
拿一个简单地网页来练手:discuz PHP开源论坛通过谷歌浏览器,自带的F12自带的Network抓包工具进行请求抓取
POST登录的数据包:
Request URL:http://www.discuz.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1 Request Method:POST Host:www.discuz.net Cache-Control:max-age=0 Connection:keep-alive Content-Length:92 Origin:http://www.discuz.net Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Content-Type:application/x-www-form-urlencoded Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate Accept-Language:zh-CN,zh;q=0.8 Referer:http://www.discuz.net/forum.php Cookie:t7asq_4ad6_noticeTitle=1; t7asq_4ad6_saltkey=CfRWcRpa; t7asq_4ad6_lastvisit=1483080183; pgv_pvi=5423572800; pgv_info=ssi=s6584585800; t7asq_4ad6_sendmail=1; t7asq_4ad6_lastact=1483083785%09forum.php%09; t7asq_4ad6_connect_is_bind=0 data中的数据: fastloginfield:username username:xxxxxxxx password:xxxxxxxx quickforward:yes handlekey:ls
中间请求头我们不用管看最后的data中的数据:
1. username 账号 我登陆前输入的账号
2. password 密码 我登陆输入的密码
POST成功返回响应头中set-cookie最后GET首页中添加这些Cookue来完成登录,我们来写入python试试
python模拟登陆__PHP开源论坛
在这里我们使用第三方模块requestspip install requests
通过pip安装这个模块
#!/usr/bin/env python #-*-coding:utf-8-*- import requests session = requests.Session() #通过这个Session课一直接传递Cookie值不需要手动取出来,get的时候再添加 url="http://www.discuz.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1" data={'fastloginfield':'username','username':'xxxxxxxx','password':'xxxxxxxx','handlekey':'ls'} session.post(url,data) #使用post请求拿到用户信息的Cookie 参数一:url是post请求的地址 参数二:是post提交的参数用的dict res = session.get('http://www.discuz.net/forum.php') #session中会把刚刚返回的Set-Cookie添加到GET请求头中进行访问,返回的对象用res名字来保存。 print res.content #通过print打印 get登录之后返回的页面 登陆成功后,可以发帖、签到神马的了,模拟登陆没有神马难的,主要是我前面讲道德要了解http协议,分析网页数据包,最后需要什么参数,获取之后传递什么参数即可
为了避免卡死shell我们可以使用ipython shell来进行打印,发现还是现实不全,我们还是写到文件吧
写到文件
f = open('d:/disccuz.txt','w') #打开一个文件如果没有使用w模式创建,如果有会被删掉重新创建 f.write(res.content) # 写进返回的网页源码 f.flush()# 刷新写入的数据 f.close()# 关闭f文件对象
以上就是一个简单的模拟登陆的详细过程,还有更复杂的,比如验证码什么的,以后会给大家慢慢分享。
相关文章推荐
- java-用HttpURLConnection发送Http请求.
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例