1. 程式人生 > 實用技巧 >python 自動化運維 監測web質量

python 自動化運維 監測web質量

1.pycurl.Curl() 類實現建立一個 libcurl 包的 Curl 控制代碼物件無引數。更多關於 libcurl 包的
介紹見 http://curl.haxx.se/libcurl/c/libcurl-tutorial.html。下面介紹 Curl 物件幾個常用的方法。
close() 方法對應 libcurl 包中的 curl_easy_cleanup 方法無引數實現關閉、回收
Curl 物件。
perform() 方法對應 libcurl 包中的 curl_easy_perform 方法無引數實現 Curl 物件
請求的提交。
setopt(option, value) 方法對應 libcurl 包中的 curl_easy_setopt 方法引數 option 是通

libcurl 的常量來指定的引數 value 的值會依賴 option可以是一個字串、整型、
長整型、檔案物件、列表或函式等。下面列舉常用的常量列表
c = pycurl.Curl() # 建立一個 curl 物件
c.setopt(pycurl.CONNECTTIMEOUT, 5) # 連線的等待時間設定為 0 則不等待
c.setopt(pycurl.TIMEOUT, 5) # 請求超時時間
c.setopt(pycurl.NOPROGRESS, 0) # 是否遮蔽下載進度條非 0 則遮蔽
c.setopt(pycurl.MAXREDIRS, 5) # 指定 HTTP 重定向的最大數
c.setopt(pycurl.FORBID_REUSE, 1) # 完成互動後強制斷開連線不重用
c.setopt(pycurl.FRESH_CONNECT,1) # 強制獲取新的連線即替代快取中的連線
c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) # 設定儲存 DNS 資訊的時間預設為 120
c.setopt(pycurl.URL,"http://www.baidu.com") # 指定請求的 URL
c.setopt(pycurl.USERAGENT,"Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1;
c.setopt(pycurl.HEADERFUNCTION, getheader) # 將返回的 HTTP HEADER 定向到回撥函式 getheader

c.setopt(pycurl.WRITEFUNCTION, getbody) # 將返回的內容定向到回撥函式 getbody
c.setopt(pycurl.WRITEHEADER, fileobj) # 將返回的 HTTP HEADER 定向到 fileobj 檔案物件
c.setopt(pycurl.WRITEDATA, fileobj) # 將返回的 HTML 內容定向到 fileobj 檔案物件


getinfo(option) 方法對應 libcurl 包中的 curl_easy_getinfo 方法引數 option 是通過
libcurl 的常量來指定的。下面列舉常用的常量列表
c = pycurl.Curl() # 建立一個 curl 物件
c.getinfo(pycurl.HTTP_CODE) # 返回的 HTTP 狀態碼
c.getinfo(pycurl.TOTAL_TIME) # 傳輸結束所消耗的總時間
c.getinfo(pycurl.NAMELOOKUP_TIME) #DNS 解析所消耗的時間
c.getinfo(pycurl.CONNECT_TIME) # 建立連線所消耗的時間
c.getinfo(pycurl.PRETRANSFER_TIME) # 從建立連線到準備傳輸所消耗的時間
c.getinfo(pycurl.STARTTRANSFER_TIME) # 從建立連線到傳輸開始消耗的時間
c.getinfo(pycurl.REDIRECT_TIME) # 重定向所消耗的時間
c.getinfo(pycurl.SIZE_UPLOAD) # 上傳資料包大小
c.getinfo(pycurl.SIZE_DOWNLOAD) # 下載資料包大小
c.getinfo(pycurl.SPEED_DOWNLOAD) # 平均下載速度
c.getinfo(pycurl.SPEED_UPLOAD) # 平均上傳速度
c.getinfo(pycurl.HEADER_SIZE) #HTTP 頭部大小

2.

#!/usr/bin/python

# -*- coding: utf-8 -*-


import sys

import pycurl

import time

import os,sys


URL = "www.baidu.com"

c = pycurl.Curl()

c.setopt(pycurl.URL,URL)

c.setopt(pycurl.CONNECTTIMEOUT, 30)

c.setopt(pycurl.TIMEOUT, 30)

c.setopt(pycurl.NOPROGRESS, 1)

c.setopt(pycurl.FORBID_REUSE, 1)

c.setopt(pycurl.MAXREDIRS, 1)

c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)


indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")

c.setopt(pycurl.WRITEHEADER, indexfile)

c.setopt(pycurl.WRITEDATA, indexfile)

try:

c.perform()

except Exception,e:

print "commection error:" +str(e)

indexfile.close()

c.close()

sys.exit()


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_CODE = c.getinfo(c.HTTP_CODE)

SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)

HEADER_SIZE = c.getinfo(c.HEADER_SIZE)

SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD)


print "HTTP 狀態碼 %s" %(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" %(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()


生成content.txt的文字

wKioL1XgAGnzZnguAAZqquPz3JU232.jpg


3.原本自動化運維裡使用的是www.google.com.hk的URL但是出現commection error:(7, 'Failed to connect to www.google.com.hk port 80: Timed out')

就把URL改成URL = "www.baidu.com"就可以正常用了

轉載於:https://blog.51cto.com/yzg784534398/1689268