« »

python登录并校验是否成功

为了监控网站运行是否正常,写了一个脚本来检查网站运行的情况。
主要是自动登录并且校验登陆后的内容来判断网站web服务和数据库服务是否正常。
代码如下:

  1. #!/usr/bin/env python
  2. # -*- coding: gbk -*-
  3. import urllib 
  4. import urllib2 
  5. import ClientCookie
  6. import re
  7. import string
  8. import time
  9. import socket
  10. timeout=10
  11. server="www.linuxlaptop.cn"
  12. loginurl="http://"+server+"/login.php"
  13. v_account=[
  14. {"name":"user1","pass":"pass1","utype":"1","vkey":"用户1"},
  15. {"name":"user2","pass":"pass2","utype":"2","vkey":"用户2"}
  16. ]
  17. def fes_write(s):
  18.     '''
  19.     控制输出信息的显示
  20.     '''
  21.     print s
  22. def get_response(x):
  23.     '''
  24.     登录,取得登陆后的页面html代码,用来判断结果
  25.     '''
  26.     fes_write("login for "+ x["name"])
  27.     eform = {'username':x["name"], 'password':x["pass"], 'usertype':x["utype"]}
  28.     qstring = urllib.urlencode( eform )
  29.     #print qstring
  30.     try:
  31.         request = urllib2.Request( loginurl , qstring ) 
  32.         response = ClientCookie.urlopen( request )
  33.         return string.split( response.read(),"\n")
  34.     except Exception, e:
  35.         fes_write(e)
  36.         return "error"
  37. def verify_info(k,l):
  38.     '''
  39.     校验信息是否正确
  40.     '''
  41.     for line in l:
  42.         if k.match(line):
  43.             return True
  44.             break
  45.     return False
  46. def verify_all():
  47.     '''
  48.     主程序,进行校验
  49.     '''
  50.     if timeout!=0:
  51.         socket.setdefaulttimeout(timeout )
  52.     fes_write("socket time out: " + str(socket.getdefaulttimeout()))
  53.     success_num=len(v_account)
  54.     for x in v_account:
  55.         vkey=re.compile('.*'+x["vkey"]+'.*')
  56.         if verify_info(vkey,get_response(x))==True:
  57.             success_num=success_num-1
  58.             fes_write(x["name"]+ " login success!")
  59.         else:
  60.             fes_write("error when " + x["name"]+ "login!")
  61.     if success_num==0:
  62.         fes_write("all things runs well!")
  63.     else:
  64.         e_notify()
  65.         fes_write("some thing is wrong!")
  66.        
  67. def e_notify():
  68.     '''
  69.     出错之后的notify操作
  70.     '''
  71.     pass
  72. if __name__ == '__main__':
  73.     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的方法,比如邮件,短消息等。

您还可能感兴趣的内容

日志信息 »

该日志于2008-11-22 12:41由 admin 发表在Python分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

没有评论

发表评论 »


返回顶部