写了个强制dr.com账号下线的东西

学校的dr.com只能同时登陆一次,且不能”被挤下去“,所以写了个这样的东西。

原理很简单,就是登陆网页版”自助服务系统“,然后停开机一下就可以了。

我主要是为了练习python的填表操作,幸运的是这个”自助服务系统”没有图形验证码,只有一个文字的随机码,用正则表达式很容易就提取出来了。

还遇到的一个问题是cookie的问题,昨天弄了一下,用chrome的调试功能截取了请求头和回复头,照搬上去的,昨天好好的,今天发现不行,原来每次回话的时候都会重新set-cookies的。

另外,不知是什么原因,直接“停机”然后再“开机”,总有点问题,第二个操作只能进行,所以就采用了再次登录这种笨的解决办法。

没有什么错误处理,只有命令行界面,等下看看要不要写个图形界面的。

上代码:

#!/usr/bin/env python 
import httplib,urllib
import re
import hashlib

def login(account,password):
    global headers1
    conn = httplib.HTTPConnection("internet.ccsu.cn")
    headers1 ={
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Encoding":"gzip,deflate,sdch",
        "Accept-Language":"zh-CN,zh;q=0.8",
        "Connection":"keep-alive",
        "DNT":"1",
        "Host":"internet.ccsu.cn",
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"
        }
    conn.request("GET","","",headers1)
    resp = conn.getresponse()
    dat1 = resp.read()
    cookies = resp.getheader("Set-Cookie")
    headers2 ={
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Encoding":"gzip,deflate,sdch",
        "Accept-Language":"zh-CN,zh;q=0.8",
        "Cache-Control":"max-age=0",
        "Connection":"keep-alive",
        #"Content-Length":str(len(params)),
        "Content-Type":"application/x-www-form-urlencoded",
        "Cookie":cookies,
        "DNT":"1",
        "Host":"internet.ccsu.cn",
        "Origin":"http://internet.ccsu.cn",
        "Referer":"http://internet.ccsu.cn/",
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"
        }    
    loginRandom = re.findall('''loginRandom = "(.+)"''',dat1)[0]   
    password = hashlib.md5(password + loginRandom).hexdigest()
    params = urllib.urlencode({"account":account,"password":password})
    conn.request("POST","/LoginAction.action",params,headers2)

    resp = conn.getresponse()
    dat2 = resp.read()
    
    #print "Set-Cookie:%s"%(cookies)
    #print "*"*80
    if len(re.findall("(nav_business)",dat2))>0:
        return conn,headers2
    else:
        conn.close()
        return 0,0
    
def switch(conn,headers,mode):
    params = urllib.urlencode({"opertype":mode,"Remark":"N/A","Summit":"submit"});
    conn.request("POST","/SwitchAction",params,headers)
    dat3 = conn.getresponse().read()
    #print re.findall('''id="texttip"\D+<p>(.+)</p>''',dat3)[0]
    conn.close()

def main():
    print "*Force logout the dr.com account*"
    account = raw_input("Account:")
    password = raw_input("Password:")
    conn,headers=login(account,password)
    if conn == 0:
        print "Account or password error."
    else:
        print "Processing..."
        switch(conn,headers,2)#disable
        conn,headers=login(account,password)
        switch(conn,headers,1)#enable
        print "Done!"
    raw_input("Press any key to quit")
    
if __name__ == "__main__":
    main()

  

你可能感兴趣的:(com)