以前学校用的是二级宽带「鹏博士 - 长城宽带」拨号,再搭配百度网盘下载,苦不堪言 😅!后来换了联通宽带,价格也降了,才能愉快地上网冲浪。
但联通宽带的体验也不完美,因为有时候网络会莫明其妙地被强制下线了,那时我正处于游戏 / 视频面试 / 在线考试 / 观看比赛......甚至有时候会登录不上,很烦 😤。
有时候,手机链接校园网 WiFi ,信号满格,账号密码也正确,但就是在显示“获取 IP 地址中”,登录不上。过了一段时间再尝试又可以了。
我的猜测:校园网 WiFi 分配的 IP 地址是 DHCP 动态分配的,而连接的设备数已经达到无线路由器的连接数最大值,所以分配不到 IP 地址。
电脑是插网线连接以太网的,打开浏览器登录自助管理后台查看,下线的原因有几种:
既然无法阻止断网,断网的时间也无规律可循,那只能在断网后及时重新登录了。
我在想,既然是在浏览器中使用表单登录,那是否能通过抓包数据获取到登录网络的必要数据呢?
Fiddler 是强大的抓包工具,能够记录所有客户端和服务器的 HTTP 和 HTTPS 请求,允许监视、设置断点,查看所有的“进出” Fiddler 的数据。
Fiddler 官网中有几款不同定位的产品,一般说的 Fiddler 都是指 Fiddler Classic
。
略过软件的那些下载与安装步骤,直接开始使用工具。
from all processes
:抓取所有进程的 HTTPS 流量;from browsers only
:只抓取浏览器的 HTTPS 流量;from non-browsers only
:只抓取除了浏览器以外的所有 HTTPS 流量;from remote clients only
:只抓取远程客户端的 HTTPS 流量。8888
改为你想要的(不要与常用服务的默认端口号相冲突),我这里改为 8889
。Result
:HTTP 状态码,例如 302 就是重定向,200 就是请求成功。Protocol
:请求协议,例如 HTTP / HTTPS / FTP。Host
:请求地址的主机名,例如我输入的“1.1.1.1”。URL
:请求资源的位置。Body
:请求的大小。Caching
:请求的缓存过期时间或缓存控制值。Content-Type
:请求响应的类型。Process
:发送该请求的进程的 ID。F12
打开控制台,点击“检查元素”,对着“登录”按钮,查看按钮的点击事件。limitSubmit()
,这个函数的作用是统计点击登录按钮的次数,一旦点击过快就会提示,然后触发函数 subCheckParam()
,这个函数的作用是检查表单提交的参数,一旦输入为空、未勾选就提示,最后提交。urlPam
,而恰好这个完整的地址就是地址栏的链接。$("#goLoginForm").attr("action", "/webauth.do?" + urlPam).submit();
虽然 Fiddler 也有模拟请求的功能,但我还是习惯使用 Postman。
已经得到了表单的提交地址,Fiddler 提供了方便的查看方式,其中包括 Headers、WebForms、Cookies、Raw、JSON 等,点击“Raw”,将其复制填写到 Postman 中,如果觉得不好复制,可以点击右下角的“View in Notepad”(用记事本打开)。
Postman 中,首先选择提交方式为 POST,然后输入提交地址,在“Headers”选项中填写上述的数据,
在“Body”选项中填写登录表单的参数,如下图所示:
登录表单的参数,一开始我以为只有用户账号、用户密码、记住我这三个,但始终登录不成功。后来在 Fiddler 中点击“WebForms”查看参数,才发现居然有将近 20 个!还好 Postman 也提供“Raw”格式的数据,直接复制粘贴。
拿到了登录参数之后,浏览器点击下线,然后使用 Postman 提交表单模拟登录成功了。
但是我的初衷是,检测到断网后可以自动化登录,而不仅仅是用 Postman 去登录,毕竟打开 Postman 点击“Send”按钮和打开浏览器点击“登录”按钮一样,没省什么步骤。
用 Python 编写程序再打包成 EXE 文件,还是编写 Windows 批处理文件更方便?🤔