Python实现批量检测HTTP服务的状态
作者:dgd2010 发布时间:2023-02-21 12:50:55
标签:python,检测HTTP
用Python实现批量测试一组url的可用性(可以包括HTTP状态、响应时间等)并统计出现不可用情况的次数和频率等。
类似的,这样的脚本可以判断某个服务的可用性,以及在众多的服务提供者中选择最优的。
需求以及脚本实现的功能如下:
默认情况下,执行脚本会检测一组url的可用性。
如果可用,返回从脚本所在的机器到HTTP服务器所消耗的时间和内容等信息。
如果url不可用,则记录并提示用户,并显示不可用发生的时间。
默认情况下,允许最大的错误次数是200,数目可以自定义,如果达到允许的最大错误次数,则在输出信息的最后,根据每一个url做出错误统计。
如果用户手动停止脚本,则需要在输出信息的最后,根据每一个url做出错误统计。
脚本中涉及的一些技巧:
使用gevent并发处理多个HTTP请求,多个请求之间无须等待响应(gevent还有很多使用技巧,可再自行学习);
使用signal模块捕获信号,如果捕获到则处理并退出,避免主进程接收到KeyboardInterrupt直接退出但无法处理的问题;
注意留意脚本中关于统计次数方面的小技巧;
脚本运行效果图( 如果图片看不清楚,请选择“在新标签页中打开图片” )如下:
脚本如下:
#!/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], 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)
0
投稿
猜你喜欢
- CSS Type set是一款在线字体调整工具。你可以使用它来对字型进行排版调整并实时的看到CSS代码。在下图中,其中,你可以设置文本的字体
- 异常处理简介在我们写程序代码的时候,往往会因一个小问题让我们整个程序直接挂掉。异常处理对我们测试有什么好处,相信做过自动化的同学都知道我们的
- 下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址)下载代码GitHub:https://github.com/Py
- Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,本文就举一例Python类继承的实例。实例代码如下:#! /usr/bi
- banner 设计会严重影响广告投放效果,在此建议相关设计人员,在设计FLASH BANNER的时候考虑到以下问题.1.
- 前言这篇文章主要介绍了Go语言使用swagger生成接口文档的方法,希望能够对大家的学习或工作具有一定的帮助,需要的朋友可以参考下。在前后端
- 有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba 进行加速,效果提升明显~(numba 安装貌
- 1、ModuleNotFoundError: No module named ‘scipy.spatial.transf
- 使用mysql二进制方式启动连接您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。实例以下是从命令行中连接m
- 本文实例为大家分享了使用python的twisted框架编写一个简单的聊天室具体代码,供大家参考,具体内容如下下面是基本架构代码:# -*-
- ImageEnhance模块提供了一些用于图像增强的类。一、ImageEnhance模块的接口所有的增强类都实现了一个通用的接口,包括一个方
- <!doctype><html><head><title>新闻图片轮换类</title
- 队、栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样、五花八门的变形和实现方式。但不管他们形式上怎么变,队和栈都有其不变
- 看到这个先思考,自己怎么输出他?为什么它有颜色?特殊符号去哪找?特殊符号在符号大全找 符号大全http://www.fhdq.net/任务1
- 安装tf2onnx以及onnxruntimepip install onnxruntimepip install tf2onnxtf 转为o
- 本文实例讲述了Flask教程之重定向与错误处理。分享给大家供大家参考,具体如下:Flask类有一个redirect()方法. 当我们调用它时
- 前言:因为研究工作的需要,要更改激活函数以适应自己的网络模型,但是单纯的函数替换会训练导致不能收敛。这里还有些不清楚为什么,希望有人可以给出
- 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值。典型的例子就是一个银行账户,因为你每一次都是在不同的时间
- 一、Tag(标签)对象1.Tag对象与XML或HTML原生文档中的tag相同。from bs4 import BeautifulSoupso
- 本文实例讲述了python通过定义一个类实例作为ftp回调方法。分享给大家供大家参考。具体实现方法如下:class Writer: &nbs