python登录教务系统_记python登陆学校教务系统踩过的坑
最近开发关于学校服务类小程序,小程序后台需要从学校的系统获取到各同学的信息,所以语言优先选择了python,并用了Django框架。之前也有写过一些爬虫,但都是用其他语言写的。对python并不熟悉,所以这次开发踩了不少坑,也走了不少弯路。在这里总结一下,分享给同样有需要的人。
学校的登陆流程是这样的:
登陆流程图
正确登陆流程应该是上图的那样的,但是如果登陆错误是不会获取到302页的,而是直接返回登陆页,python获取到的状态码也是200。
在这里我就犯了一个很严重的错误,我一直以为我post登陆是正确的,从而把bug定位到【python获取不到302验证页】这个问题上,一开始先百度,得出的答案是在requests.post请求中添加allow_redirects=False来禁止网页重定向,我发现还是没有获取到302页,从而转向更底层的httplib和自定义自己的urlib的重定向类。发现还是不行,困扰了我一天,终于在我祭出fiddler之后,bug慢慢显现出来。
fd第一步:抓包
通过fd分别抓取浏览器和pycharm Post请求包
fd抓包
fd第二步:对比
pycharm_post表单
firefox_post表单
对比pycharm和浏览器向教务系统服务器发出的请求包内容发现,
username,password,imgcode以及cookies两边都是一样的
而user_lb这个字段两边不一样pycharm请求的是中文浏览器则是乱码
难道就是因为这个字段编码问题导致服务器验证失败?
接下来分析一下pycharm的编码
在python3中默认是Unicode编码,我们在使用requests发送post请求的时候,python会默认使用utf-8编码data表单数据,而学校的表单却是以gbk编码提交,是真的很奇葩,目前来说只有非常古老的网站才采用gbk编码了。
下面我们来改一下代码
postdata = {
'imgcode': input(),
'password':input(),
'user_lb':'学生',----> 'user_lb':'学生'.encode('gbk'),
'username':input(),
}
提示:在Python3中,decode是把二进制字符串解码成Unicode码,encode则是把Unicode码转换成对应的二进制字符串
修改完以后再一次验证
pycharm_post登陆
就此困扰了我两天的问题终于成功解决,拿到了sessid,之后通过设置相应的cookies便可以对学生信息页进行相应的操作了。
贴个登陆时序图方便理解吧
login时序图
总结:我最后只用了【.encode('gbk')】就解决了问题,所以说请求的时候,编码很重要,编码错误很可能导致服务端拿不到正确的请求内容,从而爬虫也接收不到正确的响应内容。
本文原创
python登录教务系统_记python登陆学校教务系统踩过的坑相关推荐
- python登录代码思路_用python登录Dr.com思路以及代码分享
用python登录Dr.com思路以及代码分享 发布于 2014-08-28 22:31:52 | 192 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对 ...
- python 爬虫登陆学校教务系统
好像很多人写爬虫,都是从登陆学校教务系统开始的.为什么?学校教务系统渣啊,都是明文传输的,而且是200x年写的,没有用到很多现在的技术,所以相对来说容易些.感觉很多学校都是用的清元优软的这个,我们学校 ...
- python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课
最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...
- python抢课脚本 验证码_用Python实现模拟登录正方教务系统抢课
最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...
- 基于python的排课表系统_利用python爬取广西科技大学教务管理信息系统班级课表...
操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...
- python课表查询系统_使用python抓取广西科技大学教务系统课程表
因学校教务系统课程表查询功能累赘,服务器经常挂,同时也不适合手机端查询,所以用python开发爬虫抓取所有课程表,放到我的服务器上面. 本文仅供学习. 特性 中途退出程序再次运行不会抓取到重复课程表 ...
- 利用Python requests库模拟登陆学校教务系统
在研究了一会requests库的实现之后.发现requests的确非常强大.. 几行代码就登陆上了学校的教务系统,但也许是我们学校的教务系统做的太烂了吧23333.动不动就血崩. 下面是代码. imp ...
- python飞机票预定系统_数据库课程设计 - 机票预订系统
一.机票预定系统 1.1 题目要求 要求具备如下基本功能 班机基本信息的管理: 航班信息的管理: 旅客预定机票.取消预约.付款取票.退票的管理: 查询航班信息.航班预定情况.旅客信息,计算航班满座率. ...
- python自动排课表_利用python爬取广西科技大学教务管理信息系统班级课表
操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...
最新文章
- Java基类共同属性设置_java – 你有一个Hibernate实体的基类吗?
- mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...
- windows 安装 reviewboard
- 成功解决.append方法出现错误IndexError: list index out of range
- 【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)
- 价值投资/指标选股(akshare)
- 检查列表中的所有元素在Python中是否相同
- centos 安装mysql客户端_linux下mysql的yum源安装/配置/卸载
- fastjson.JSONObject之对象与JSON转换方法
- RHEL 7.6 安装 Oracle 18c RAC
- sql server 中某个字段值合并【转】
- 电脑连接安卓手机摄像头的方法(含DroidCam安装包及简明使用教程)
- ICEM: 合并混合网格
- 针对校园LAN的OpenFlow和软件定义网络
- TP-LINK路由器手动设置网关、DNS、开启DHCP并指定地址池IP范围
- 2.4 旋转曲面 (1)
- 2007网吧经营攻略之技术完全篇
- 操作系统——文件管理
- java分布式技术平台架构方案
- Adversarial Attack on Attackers: Post-Process to Mitigate Black-Box Score-Based Query Attacks