Python小工具系列是一个使用Python实现各种各样有意思的小玩意儿的系列,包括制作个性化的二维化、词云、简单爬虫等,持续更新中,如果你感兴趣就关注一波吧!
一、基本介绍
接上一篇获取验证码图片,获取到图片并识别即可得到验证码,按照简单难度的网站,接下来就应该携带上表单数据,然后进行Post请求了。但我所使用的案例是我学校的教务系统,没想到它使用了RSA加密。
该加密的原理可见链接: RSA算法原理-知乎
所以下面就以教务系统网站为案例,介绍一下如何实现最终的请求登陆。
二、具体步骤
1.数据解析——获取参数
这里还是使用xpath,因为这个不需要怎么学,操作步骤如下:
⭕️:这里要注意,XPath获取的是列表,需要取第[0]个元素才是具体值,且获取的值是字符串!
2.数据加密——使用RSA加密模块
这里我使用的模块是rsa,跟有一些博主使用的不同,导入如下:
然后就进行加密,如下所示:
3.POST请求——获取登陆后网页
最后只要携带表单数据,发起POST请求就可以获取登陆后的网页啦!
三、注意事项
1.Cookie问题
因为涉及多次请求,一定要保证前后携带的Cookie保持一致!否则就请求不到登陆后的页面
2.RSA模块的使用
因为网络上有很多教程,但是都是以结果为导向的,不介绍怎么知道这些函数怎么用的,注释也不详细。我也是请求大佬才明白如何给函数传递正确参数。
而授人以鱼不如授人以渔,因此我下面会详细介绍我是如何了解 一个陌生的rsa 模块中加密函数的使用。
首先肯定要导入一个你中意的库,然后使用其加解密函数,由于我的需求很简单:只需要进行加密,得到加密后的密文即可。因此我参考的是这篇博客: 超简易python实现RSA加解密
然后进入想要了解的函数,查看具体源代码,示例如下:
点进去之后,看到结果如下图所示,可以发现这里第二个参数就是公钥,且是一个非基本数据类型,所以再Alt + 鼠标左键点击该类型,查看它的初始化方法即可知道要传递哪些类型参数
然后发现这个类型还继承自一个父类,再次进入查看该父类
在父类中找到该类的初始化方法,这下就了解要传递哪些参数了!
从上面可知,要分别传递int 型参数 n 和 e ,从而初始化一个AbstractKey实例(但要作为Publickey实例使用),因此改变最开始使用的别人博客里的代码:
⭕️特别注意,原本使用rsa.encrypt 加密后得到的是二进制数,这里根据需要,我将其转换为了十六进制。
版权归原作者 windxDev 所有, 如有侵权,请联系我们删除。