自动化运维脚本之pycurl模块:实现探测web服务质量

pycurl是一个c语言写的libcurl python的实现,功能非常强大,支持的操作协议:FTP,HTTP,HTTPS,Telnet等,可以理解为Linux下的curl命令功能的python封装

pycurl常用的方法:

pycurl.Curl()类实现创建一个libcurl包的Curl句柄对象,无参数
close():无参数,实现关闭、回收Curl对象
perform():实现Curl对象请求的提交
setopt(option,value):参数option是通过libcurl的常量来指定的,参数value的值会依赖于option
option常用的常量值列表
c = pycurl.Curl()
c.setopt(pycurl.CONNECTTIMEOUT,5)	#连接的等待时间,设置为0这不等待
c.setopt(pycurl.TIMEOUT,5)		    #请求超时时间
c.setopt(pycurl.NOPORGRESS,0)		#是否屏蔽下载进度条,非0则屏蔽
c.setopt(pycurl.MAXREDIS,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.HEADERFUNTION,getheader)    #将返回的http header定向到回调函数getheader
c.setopt(pycurl.WRITEFUNCITN,getbody)	    #将返回的内容重定向到回调函数getbody
c.setopt(pycurl.WRITEHEADER,fileobj)	    #将返回的HTTP HEADER定向到fileobj文件对象
c.setopt(pycurl.WRITEDATA,fileobj)	        #将返回的HTML内容定向到fileobj文件对象

getinfo(option)方法:参数是通过liburl常量来指定的
常用的常量列表:
c = pycurl.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_SIEZE)		#HTTP头部大小

 

案例:实现探测WEB服务质量
web服务质量通常有2个标准
1. 服务的可用性
    HTTP返回状态码是否为200,
2. 服务的响应速度
    响应速度包括:DNS解析速度,连接时间、下载时间、建立连接到准备传输时间等等

 

# -*- coding: utf-8 -*-
import os,sys
import time
import pycurl



URL = "http://www.baidu.com/"                    #探测的URL
c = pycurl.Curl()                                #创建curl对象
c.setopt(pycurl.URL,URL)                         #定义请求的url
c.setopt(pycurl.CONNECTTIMEOUT,5)                #定义连接超时时间 5s
c.setopt(pycurl.TIMEOUT,5)                       #定义请求超时时间 5s
c.setopt(pycurl.NOPROGRESS,1)                    #屏蔽下载进度条
c.setopt(pycurl.FORBID_REUSE,1)                  #完成交互后强制断开连接,不复用
c.setopt(pycurl.MAXREDIRS,1)                     #设置HTTP重定向的最大连接数
c.setopt(pycurl.DNS_CACHE_TIMEOUT,30)            #DNS缓存失效时间 30s

#创建一个文件,用来存储header信息和url返回信息
with open(os.path.dirname(os.path.realpath(__file__))+'/file_name','wb') as wstream:
    c.setopt(pycurl.WRITEHEADER,wstream)
    c.setopt(pycurl.WRITEDATA,wstream)
    try:
        c.perform()                            #提交请求
    except Exception as e:
        print("error:" + e)
        sys.exit()
#获取信息
namelookup = c.getinfo(pycurl.NAMELOOKUP_TIME)            #获取DNS解析时间
connect_time = c.getinfo(pycurl.CONNECT_TIME)             #获取连接时间
pretransfer = c.getinfo(pycurl.PRETRANSFER_TIME)          #连接到准备传输时间
start_transfer = c.getinfo(pycurl.STARTTRANSFER_TIME)     #建立连接到开始传输时间
total_time = c.getinfo(pycurl.TOTAL_TIME)                 #传输的总时间
http_code = c.getinfo(pycurl.HTTP_CODE)                   #获取URL响应的HTTP状态码
size_download = c.getinfo(pycurl.SIZE_DOWNLOAD)           #获取下载数据包大小
header_size = c.getinfo(pycurl.HEADER_SIZE)               #获取头部大小
speed_download = c.getinfo(pycurl.SPEED_DOWNLOAD)         #获取下载速度

#打印输出
print("返回的http_code状态码:%s" % http_code)
print("DNS解析域名时间: %s" % namelookup)
print("建立连接的时间:%s" % connect_time)
print("从建立连接熬准备传输时间: %s" % pretransfer)
print("从建立连接到开始传输消耗的时间:%s" % start_transfer)
print("总共消耗的时间:%s" % total_time)
print("下载文件的大小:%s" % size_download)
print("头部大小:%s" % header_size)
print("下载的速度:%s" % speed_download)
c.close()                                               #关闭

得到的结果:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值