调用pycurl提供的方法,探测web服务质量,如响应http码,请求延时,http头信息,下载速度等
pycurl安装:
easy_install pycurl
pip install pycurl
源码安装:
源码安装curl
wget http://curl.haxx.se/download/curl-7.39.0.tar.gz
tar xf -->./configure-->make && make install-->export LD_LIBRARY_PATH=/usr/local/lib
wget https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.5.tar.gz --no-check-certificate
tar xf -->cd -->python setup.py install --curl-config=/usr/local/bin/curl-config
检验安装结果:
import pycurl
pycurl.version -->检验
检测web服务质量代码
webcheck.py
#!/usr/bin/env python
#encoding=utf-8
import os,sys
import time
import pycurl
URL="http://www.jd.com" #目标url
c=pycurl.Curl() #创建一个Curl对象
c.setopt(pycurl.URL,URL) #定义请求url
c.setopt(pycurl.CONNECTTIMEOUT,5) #定义请求连接的等待时间
c.setopt(pycurl.TIMEOUT,5) #定义请求超时时间
c.setopt(pycurl.NOPROGRESS,1) #屏蔽下载进度条,非0表示屏蔽,0表示不屏蔽
c.setopt(pycurl.FORBID_REUSE,1) #完成交互后强制断开连接,不重用
c.setopt(pycurl.MAXREDIRS,1) #指定http重定向的最大数为1
c.setopt(pycurl.DNS_CACHE_TIMEOUT,30) #设置保存dns信息的时间
#创建一个文件对象indexfile,以wb方式打开,存储返回的http头信息及页面内容
indexfile=open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")
c.setopt(pycurl.WRITEHEADER,indexfile) #将返回的http header定向到indexfile文件对象
c.setopt(pycurl.WRITEDATA,indexfile) #将返回的html内容定向到indexfile文件对象
try:
c.perform() #提交请求
except Exception,e:
print "connect error:"+str(e)
indexfile.close()
c.close()
sys.exit()
NAMELOOKUP_TIME=c.getinfo(c.NAMELOOKUP_TIME) #获取dns解析时间
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) #获取http状态码
SIZE_DOWNLOAD=c.getinfo(c.SIZE_DOWNLOAD) #获取下载数据包大小
HEADER_SIZE=c.getinfo(c.HEADER_SIZE) #获取http头部大小
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" % (TOTAL_TIME*1000)
print "下载数据包大小: %d bytes/s" % (SIZE_DOWNLOAD)
print "HTTP头部大小: %d bytes/s" % (HEADER_SIZE)
print "平均下载速度: %d bytes/s" % (SPEED_DOWNLOAD)
#关闭文件及curl对象
indexfile.close()
c.close()