最近校园网(需要WEB登陆)不太稳定,总是掉线,于是想写一个基于网络爬虫的校园网自动登陆系统,让程序自动每隔一段时间自动检测网络连通性,查了一些资料,最后用了Fiddler软件进行网络监听,对网页http请求的内容和参数进行了解。

Fiddler基础知识

  • Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改。
  • 代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。
  • Fiddler可以抓取支持http代理的任意程序的数据包,如果要抓取https会话,要先安装证书。

HTTP协议

  • 要分析Fiddler抓取的数据包,我们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
  • HTTP的工作过程:当我们请求一个超链接时,HTTP就开始工作了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后做相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据做相应的处理,就是最终我们看到的内容。这些过程是HTTP自动完成的,我们只是输入或点击请求地址,然后查看前端给我们展示的内容。更多关于HTTP协议的介绍请参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
  • 请求方式常用的有:GET、PUT、POST、DELETE。
  • HTTP状态码主要分为5类:以1开头的代表请求已被接受,需要继续处理;以2开头的代表请求已成功被服务器接收、理解、并接受;以3开头的代表需要客户端采取进一步的操作才能完成请求;以4开头的代表了客户端看起来可能发生了错误,妨碍了服务器的处理;以5开头的代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
  • 常见的主要有:200:服务器成功处理了请求;404:未找到资源;500:内部服务器错误;503:服务器目前无法为请求提供服务;302:请求的URL已临时转移;304:客户端的缓存资源是最新的,要客户端使用缓存。
  • 每个状态码的详细介绍请参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

Fiddler抓包原理

注意:Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的 程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。

配置

打开Fiddler  Tool->Fiddler Options->HTTPS 。  (配置完后记得要重启Fiddler).

选中"Decrpt HTTPS traffic",    Fiddler就可以截获HTTPS请求,第一次会弹出证书安装提示,若没有弹出提示,勾选Actions-> Trust Root Certificate

另外,如果你要监听的程序访问的 HTTPS 站点使用的是不可信的证书,则请接着把下面的 “Ignore servercertificate errors” 勾选上。

证书安装提示:

点击Yes,留意一下红框里面的内容,DO_NOT_TRUST_FiddlerRoot ,这个就是证书的名称。

点击是。

点击确定,这样Fiddler证书就已经添加成功了。

查看一下证书,Actions—>open windows certificate Manager

可以证书已经添加进去了,证书名称就是之前提醒大家留意的,【DO_NOT_TRUST_FiddlerRoot】

手机端包抓取可参考https://www.cnblogs.com/woaixuexi9999/p/9247705.html。

上面我们对Fiddler的架构和配置进行了相应的介绍,下面详细介绍程序具体实现过程

先上图

上面就是打开我们学校登录界面的报文头和响应,然后查看一下输入账号密码以后的参数信息,具体信息见程序,下面直接放程序了,详细信息可以去网上搜索,很简单的

import requests
import time
from time import sleep
url = '登录网址'def login():postdata = {'username': '账号','password': '密码','action': 'login','ac_id': '1','user_ip':'','nas_ip':'',                           //具体信息每个网站不一样,需要用'user_mac':'',                         //fiddiler来查看webForms信息'url':'登录网址','save_me':'1'}headers = {'Accept': 'application/x-ms-application,image/jpeg,application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN','Connection': 'Keep-Alive',              //这是登录界面请求报文头'Content-Length': '4587','Content-Type': 'text/html','Cookie': 'login=bQ0o5ZADI11BgO3HLndd%252Bxt3LbV4WDOtcmv8IeEY8w0yxL3s6DIILB0Jrp9m%252B0wjynVc1ZISbR2DkFEzIYuAuCBLlsfcmLRwjsHsaSehvpE93gH54HtueO9Pg5M0piPVpxV2eNMeSXyeR%252FqX%252BBsi6HXaB%252Fgrb%252FtLaQW9Zpc%253D; UM_distinctid=1676291cc5fe3-0be363d479ccea-3a064d5a-100200-1676291cc70ef','Host': '具体参数见fiddiler报文头信息','Referer': '具体参数见fiddiler报文头信息','User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)'}requests.post(url, data=postdata)#检查内网是不是联通
def is_connect_edu():status_code = requests.get(url).status_codeif status_code == 200:return Trueelse:                                                return False#检查外网是不是联通
def is_connect_web():r = requests.get("http://www.baidu.com").textif r.find('baidu.com') != -1:return Trueelse:return False#周期性检查网络连通性
while True:if is_connect_edu():if not is_connect_web():print("Network disconnected, try connecting...")login()if requests.get('http://www.baidu.com').status_code==200:x='Network back to normal at 'y=time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())print(x+y)else:x='Network connection failed at 'y=time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())print(x+y)else:x='Network connection normal at 'y=time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())print(x+y)time.sleep(5)

完毕!!

网上有很多有关网络爬虫的实例,还是很有用的,这个看不懂,大家去找一些通俗易懂的吧。。。

下面给几个比较好的参考文献:

https://blog.csdn.net/abitch/article/details/51939879

https://blog.csdn.net/hty46565/article/details/72822447

https://uule.iteye.com/blog/2408809

https://blog.csdn.net/u010651394/article/details/82975266

https://blog.csdn.net/shenhuaifeng/article/details/78333851

https://blog.csdn.net/internethk2/article/details/79196915

https://blog.csdn.net/shenhuaifeng/article/details/78333851

https://sunlanchang.github.io/2017/10/31/%E6%A0%A1%E5%9B%AD%E7%BD%91%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E8%84%9A%E6%9C%AC/

(最后一篇强烈建议)

基于fiddler的网络爬虫校园网自动登陆系统相关推荐

  1. python网络爬虫_python小知识,基于Python 的网络爬虫技术分析

    在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集. 在网络爬虫技术应用中,Python 脚本语言的 ...

  2. 基于python的网络爬虫编程_基于Python的网络爬虫程序设计

    程序设计 ●Program Design 基于 Python的网络爬虫程序设计 网络 信 息量 的迅 猛 增 长,对 如何从海量的信息中准确的搜索 到用户需要的信息提 出了极大的 挑战.网络爬 虫具有 ...

  3. 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api

    TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨 ...

  4. 基于Java的网络爬虫实现抓取网络小说(一)

    基于Java的网络爬虫实现抓取网络小说(一) 今天开始写点东西,一方面加深印象一方面再学习. 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用 ...

  5. windows下实现校园网自动登陆

    windows下实现校园网自动登陆 需求 校园网经常会断开连接,每次都要重新登录,windows定时任务自动登录校园网 思路 1.python脚本检测网络是否连接,如果没网络,实现校园网账号密码自动登 ...

  6. python网络爬虫技术-基于Python的网络爬虫技术综述

    汪洋 姜新通 [摘 要]人类社会已经进入大数据时代,这正在改变着我们的工作和生活.随着互联网的兴起和发展,同时也产生了各种对人类有价值的数据.快速搜索数据和充分利用数据信息已成为一个巨大挑战.这样的需 ...

  7. python网络爬虫课程设计题目_山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》...

    山东建筑大学计算机网络课程设计<基于Python的网络爬虫设计> 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部) ...

  8. java网络爬虫论文_毕业设计(论文)-基于JAVA的网络爬虫的设计与实现.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava 毕业设计(论文)-基于JAVA的网络爬虫的设计与实现. ...

  9. Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)

    Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集) 目录 数据集下载的所有代码 1.主文件 mni ...

最新文章

  1. 使用域名访问后台页面
  2. word 2013 题注、图注、插入图片自动修改大小、批量更新题注编号
  3. [ExtJS5学习笔记]第十五节 Extjs5表格显示不友好?panel的frame属性在作怪
  4. SkyEye:航空发动机控制系统仿真
  5. QT与VS环境下代码文件编码格式使用utf-8与带BOM的utf-8的差异
  6. 力扣(LeetCode)56
  7. Silverlight 与 WPF 的一些差异
  8. minecraft编程java_Minecraft编程基础课程(一)
  9. 如何选择企业数据加密软件?
  10. 香港云服务器网站备案,中国香港云服务器网站备案
  11. 新版标准日本语中级_第十八课
  12. 一文告诉你哪些map element类型支持就地更新
  13. 小程序或者公众号授权给第三方平台流程
  14. 淘宝权重及其大数据分析
  15. 时间触发以太网TTE
  16. 2019-安卓开发环境搭建-经验分享-Eclipse(主要内容)+Android Studio
  17. K8S中deployment和service案例
  18. aop - spring如何选择、创建代理bean
  19. java三个技术平台_java三大技术平台是什么
  20. STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)

热门文章

  1. ai入门视频,亲测有效
  2. Institute for Manufacturing virtual check in part 1
  3. 宅家学习秘密武器!让时间从视频流和朋友圈中回到程序员的视野中吧!
  4. Python selenium环境搭建
  5. C++走向远洋——26(项目二,2,构造函数与析构函数)
  6. 升级到win10,安装visualstudio ,80端口被系统服务占用的解决
  7. ubuntu下apache rewrite的设置
  8. NET许可证及License
  9. java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计
  10. HDUOJ-2094-产生冠军