[Python]urllib库的简单应用-实现北航宿舍自动上网

在北航,上网前必须通过一个认证系统。次次开电脑都要打开这个认证网页连接一下网络还是挺烦人的。刚好最近看了看了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到一个地址。这个脚本也只能在宿舍使用。以后知识水平提高一些再完善吧。

posted @ 2016-10-24 15:23  CN_LHC  阅读(738)  评论(0编辑  收藏  举报