在北航,上网前必须通过一个认证系统。次次开电脑都要打开这个认证网页连接一下网络还是挺烦人的。刚好最近看了看了Python的urllib库,那么就写一个最简易的自动登录器吧....(这也算是我的Python处女作了)
1.分析
显然,点击登陆按钮后会提交一个表单。想要实现自动登录,利用Request方法提交一份数据即可。
得弄清楚它提交了些什么东西,利用火狐的Httpfox插件抓包分析一下看看。
可以看到提交了这样一段信息到某一个特定的地址上去。
action=login&username=16231275&password={B}bGhxxxxxxQ0NA%3D%3D&ac_id=4&user_ip=&nas_ip=&user_mac=&save_me=1&ajax=1
username字段是学号,password字段是加密过的密码。
2.编码与调试
简单非常简单。就是构造一条消息然后提交。
import urllib import urllib2 class login: def __init__(self): self.Url = 'https://gw.buaa.edu.cn:803/include/auth_action.php' self.Data = 'action=login&username=16231275&password={B}bGxxxxxxx%3D%3D&ac_id=4&user_ip=&nas_ip=&user_mac=&save_me=1&ajax=1' def auto_login(self): request = urllib2.Request(url=self.Url,data=self.Data) response = urllib2.urlopen(request) print response.read() Buaa = login() Buaa.auto_login()
略微修改一下,利用python自带base64编码模块,模拟表单的加密过程。这样方便直接使用别的账号登录。
import urllib import urllib2 import base64 class login: def __init__(self,Username,Password): self.Url = 'https://gw.buaa.edu.cn:803/include/auth_action.php' Password=base64.b64encode(Password) L=list(Password) for a in range(len(L)): if L[a]=='=': L[a]='%3D' Password=''.join(L) self.Data = 'action=login&username='+Username+'&password={B}'+Password+'&ac_id=4&user_ip=&nas_ip=&user_mac=&save_me=1&ajax=1' def auto_login(self): request = urllib2.Request(url=self.Url,data=self.Data) response = urllib2.urlopen(request) print response.read() ##################################################### Buaa = login(Username='16231275',Password='XXXXXXXX') Buaa.auto_login()
3.后记
现在这个小程序打包成exe并随系统启动,便实现了启动后自动联网。
然而北航的认证系统,表单提交的地址会随着地点的改变而改变,教学楼和宿舍的登陆表单并不一定Post到一个地址。这个脚本也只能在宿舍使用。以后知识水平提高一些再完善吧。