Python实现批量检测HTTP服务的状态
发布时间:2020-12-16 20:20:17 所属栏目:Python 来源:网络整理
导读:用Python实现批量测试一组url的可用性(可以包括HTTP状态、响应时间等)并统计出现不可用情况的次数和频率等。 类似的,这样的脚本可以判断某个服务的可用性,以及在众多的服务提供者中选择最优的。 需求以及脚本实现的功能如下: 默认情况下,执行脚本会检
用Python实现批量测试一组url的可用性(可以包括HTTP状态、响应时间等)并统计出现不可用情况的次数和频率等。 类似的,这样的脚本可以判断某个服务的可用性,以及在众多的服务提供者中选择最优的。 需求以及脚本实现的功能如下:
脚本中涉及的一些技巧:
脚本运行效果图( 如果图片看不清楚,请选择“在新标签页中打开图片” )如下: 脚本如下: #!/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- """ Created by PyCharm. File: LinuxBashShellScriptForOps:testNoHttpResponseException,testHttpHostAvailability.py User: Guodong Create Date: 2016/10/26 Create Time: 12:09 Function: test Http Host Availability Some helpful message: For CentOS: yum -y install python-devel python-pip; pip install gevent For Ubuntu: apt-get -y install python-dev python-pip; pip install gevent For Windows: pip install gevent """ import signal import time import sys # execute some operations concurrently using python from gevent import monkey monkey.patch_all() import gevent import urllib2 hosts = ['https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck','https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck',] errorStopCounts = 200 quit_flag = False statistics = dict() def changeQuit_flag(signum,frame): del signum,frame global quit_flag quit_flag = True print "Canceled task on their own by the user." def testNoHttpResponseException(url): tryFlag = True global quit_flag errorCounts = 0 tryCounts = 0 global statistics globalStartTime = time.time() while tryFlag: if not quit_flag: tryCounts += 1 print('GET: %s' % url) try: startTime = time.time() resp = urllib2.urlopen(url) # using module 'request' will be better,request will return header info.. endTime = time.time() data = resp.read() responseTime = endTime - startTime print '%d bytes received from %s. response time is: %s' % (len(data),url,responseTime) print "data received from %s at %d try is: %s" % (url,tryCounts,data) gevent.sleep(2) except urllib2.HTTPError as e: errorCounts += 1 statistics[url] = errorCounts currentTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) print "HTTPError occurred,%s,and this is %d times(total) occurs on %s at %s." % ( e,statistics[url],currentTime) if errorCounts >= errorStopCounts: globalEndTime = time.time() tryFlag = False else: globalEndTime = time.time() break for url in statistics: print "Total error counts is %d on %s" % (statistics[url],url) hosts.remove(url) for url in hosts: print "Total error counts is 0 on %s" % url globalUsedTime = globalEndTime - globalStartTime print "Total time use is %s" % globalUsedTime sys.exit(0) try: # Even if the user cancelled the task,# it also can statistics the number of errors and the consumption of time for each host. signal.signal(signal.SIGINT,changeQuit_flag) gevent.joinall([gevent.spawn(testNoHttpResponseException,host) for host in hosts]) except KeyboardInterrupt: # Note: this line can NOT be reached,because signal has been captured! print "Canceled task on their own by the user." sys.exit(0) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- django model去掉unique_together报错的解决方案
- Python 实现购物商城,含有用户入口和商家入口的示例
- Python使用pylab库实现画线功能的方法详解
- web.py 十分钟创建简易博客实现代码
- python – 使用groupby和pandas dataframe中的多个列从字符
- python – 如何显式指定Firefox的Selenium路径?
- Django DB Design – 维护常用和历史数据
- Python居然还能用到财务当中?数据清洗中的运用!无所不能的
- python – ReferenceError:QML中没有定义“something”
- python爬虫实例--爬取拉勾网