python登录并校验是否成功
为了监控网站运行是否正常,写了一个脚本来检查网站运行的情况。
主要是自动登录并且校验登陆后的内容来判断网站web服务和数据库服务是否正常。
代码如下:
- #!/usr/bin/env python
- # -*- coding: gbk -*-
- import urllib
- import urllib2
- import ClientCookie
- import re
- import string
- import time
- import socket
- timeout=10
- server="www.linuxlaptop.cn"
- loginurl="http://"+server+"/login.php"
- v_account=[
- {"name":"user1","pass":"pass1","utype":"1","vkey":"用户1"},
- {"name":"user2","pass":"pass2","utype":"2","vkey":"用户2"}
- ]
- def fes_write(s):
- '''
- 控制输出信息的显示
- '''
- print s
- def get_response(x):
- '''
- 登录,取得登陆后的页面html代码,用来判断结果
- '''
- fes_write("login for "+ x["name"])
- eform = {'username':x["name"], 'password':x["pass"], 'usertype':x["utype"]}
- qstring = urllib.urlencode( eform )
- #print qstring
- try:
- request = urllib2.Request( loginurl , qstring )
- response = ClientCookie.urlopen( request )
- return string.split( response.read(),"\n")
- except Exception, e:
- fes_write(e)
- return "error"
- def verify_info(k,l):
- '''
- 校验信息是否正确
- '''
- for line in l:
- if k.match(line):
- return True
- break
- return False
- def verify_all():
- '''
- 主程序,进行校验
- '''
- if timeout!=0:
- socket.setdefaulttimeout(timeout )
- fes_write("socket time out: " + str(socket.getdefaulttimeout()))
- success_num=len(v_account)
- for x in v_account:
- vkey=re.compile('.*'+x["vkey"]+'.*')
- if verify_info(vkey,get_response(x))==True:
- success_num=success_num-1
- fes_write(x["name"]+ " login success!")
- else:
- fes_write("error when " + x["name"]+ "login!")
- if success_num==0:
- fes_write("all things runs well!")
- else:
- e_notify()
- fes_write("some thing is wrong!")
- def e_notify():
- '''
- 出错之后的notify操作
- '''
- pass
- if __name__ == '__main__':
- verify_all()
v_account定义了多个账户,因为用户可能不同,后台机制不一样,所以用多个用户来登录
request = urllib2.Request( loginurl , qstring ) 用的是post的方法,也可以用get的方法
ClientCookie,一个python的扩展包
2个v_account里的vkey用来和登陆后的页面上的信息来验证是否正常登录的
socket.setdefaulttimeout用来设置建立socket连接的超时设置,原来没有设置,程序会一直等待回应(如果服务器端做了最长运行时间会好点),设置了10秒,如果一个登录程序10秒还没有成功,基本上就失败了
e_notify:可以自己设置一些notify的方法,比如邮件,短消息等。
没有评论▼