python登录并校验是否成功

python登录并校验是否成功

2007年六月11日 by 贝贝爸 Leave a reply »

为了监控网站运行是否正常,写了一个脚本来检查网站运行的情况。
主要是自动登录并且校验登陆后的内容来判断网站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.juyimeng.com "
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的方法,比如邮件,短消息等。

Popularity: 19%


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值