Python之——實現探測Web服務質量
阿新 • • 發佈:2019-01-26
HTTP服務是最流行的網際網路應用之一,服務質量的好壞關係到使用者體驗以及網站的運營服務水平,最常用的有兩個標準,一為服務的可用性,比如是否處於正常提供服務狀態,而不是出現404頁面或500頁面錯誤等;二是服務響應的速度,比如靜態類檔案下載時間都控制在毫秒級,動態CGI為秒級。本例項使用pycurl的setopt與getinfo方法時間HTTP服務質量的探測,獲取監控URL返回的HTTP狀態碼,HTTP狀態碼採用pycurl.HTTP_CODE常量,以及從HTTP請求到下載期間各環節的響應時間,通過pycurl.NAMELOOKUP_TIME、pycurl.CONNECT_TIME、pycurl.PRETRANSFER_TIME、pycurl.R等常量來時間。另外通過pycurl.WRITEHEADER、pycurl.WRITEDATA常量得到目標URL的HTTP響應頭部及頁面內容。具體程式碼如下:
程式碼執行結果如下# -*- coding:UTF-8 -*- ''' Created on 2018年1月4日 @author: liuyazhuang ''' import os, sys import time import pycurl #探測的目標URL URL= "http://www.baidu.com" #建立一個Curl物件 c = pycurl.Curl() #定義請求的URL常量 c.setopt(pycurl.URL, URL) #定義請求連線的等待時間 c.setopt(pycurl.CONNECTTIMEOUT, 5) #定義請求超時時間 c.setopt(pycurl.TIMEOUT, 5) #遮蔽下載進度條 c.setopt(pycurl.NOPROGRESS, 1) #完成互動後強制斷開連線,不重用 c.setopt(pycurl.FORBID_REUSE, 1) #指定HTTP重定向的最大數為1 c.setopt(pycurl.MAXREDIRS, 1) #設定儲存DNS資訊的時間為30秒 c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30) #建立一個檔案物件,以“wb”方式開啟,用來儲存返回的http頭部及頁面內容 indexfile = open(os.path.dirname(os.path.realpath(__file__)) + "/content.txt", "wb") #將返回的HTTP HEADER定向到indexfile檔案 c.setopt(pycurl.WRITEHEADER, indexfile) #將返回的HTML內容定向到indexfile檔案物件 c.setopt(pycurl.WRITEDATA, indexfile) try: #提交請求 c.perform() except Exception, e: print "connection error: " + str(e) indexfile.close() c.close() sys.exit() #獲取DNS解析時間 NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME) #獲取建立連線時間 CONNECT_TIME = c.getinfo(c.CONNECT_TIME) #獲取從建立連線到準備傳輸所消耗的時間 PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME) #獲取從建立連線到傳輸開始消耗的時間 STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME) #獲取傳輸的總時間 TOTAL_TIME = c.getinfo(c.TOTAL_TIME) #獲取HTTP狀態碼 HTTP_CODE = c.getinfo(c.HTTP_CODE) #獲取下載資料包大小 SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD) #獲取HTTP頭部大小 HEADER_SIZE = c.getinfo(c.HEADER_SIZE) #獲取平均下載速度 SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD) #列印輸出相關資料 print "HTTP狀態碼: %d" % (HTTP_CODE) print "DNS解析時間: %.2f ms" % (NAMELOOKUP_TIME * 1000) print "建立連線時間: %.2f ms" % (CONNECT_TIME * 1000) print "準備傳輸時間: %.2f ms" % (PRETRANSFER_TIME * 1000) print "傳輸開始時間: %.2f ms" % (STARTTRANSFER_TIME * 1000) print "傳輸結束總時間: %.2f ms" %(TOTAL_TIME * 1000) print "下載資料包大小: %d bytes/s" %(SIZE_DOWNLOAD) print "HTTP頭部大小: %d byte" %(HEADER_SIZE) print "平均下載速度: %d bytes/s" %(SPEED_DOWNLOAD) #關閉檔案及Curl物件 indexfile.close() c.close()
HTTP狀態碼: 200
DNS解析時間: 16.00 ms
建立連線時間: 62.00 ms
準備傳輸時間: 62.00 ms
傳輸開始時間: 109.00 ms
傳輸結束總時間: 281.00 ms
下載資料包大小: 112563 bytes/s
HTTP頭部大小: 989 byte
平均下載速度: 112563 bytes/s
檢視獲取的檔案頭部及頁面內容檔案content.txt,如下圖所示