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 是通
長整型、檔案物件、列表或函式等。下面列舉常用的常量列表
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.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的文字
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