Python中用pycurl监控http响应时间脚本分享


Posted in Python onFebruary 02, 2015

最近需要对节点到源站自己做个监控,简单的ping可以检测到一些东西,但是http请求的检查也要进行,于是就研究了下pycurl。

pycurl是个用c语言实现的python 库,虽然据说不是那么pythonic,但是却很高效,它支持的协议居多:

supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more!

这一堆协议已经很多了,我需要就是http一个,相对urlib来说,这个库可能更快些。

以下这个脚本是对某一个给定的url进行检查,并打印出http相应码,响应大小,建立连接时间,准备传输时间,传输第一个字节时间,完成时间。

#!/usr/bin/python
# coding: UTF-8
import StringIO
import pycurl
import sys
import os
class Test:
    def __init__(self):
        self.contents = ''
    def body_callback(self,buf):
        self.contents = self.contents + buf
def test_gzip(input_url):
    t = Test()
    #gzip_test = file("gzip_test.txt", 'w')
    c = pycurl.Curl()
    c.setopt(pycurl.WRITEFUNCTION,t.body_callback)
    c.setopt(pycurl.ENCODING, 'gzip')
    c.setopt(pycurl.URL,input_url)
    c.perform()
    http_code = c.getinfo(pycurl.HTTP_CODE)
    http_conn_time = c.getinfo(pycurl.CONNECT_TIME)
    http_pre_tran = c.getinfo(pycurl.PRETRANSFER_TIME)
    http_start_tran = c.getinfo(pycurl.STARTTRANSFER_TIME)
    http_total_time = c.getinfo(pycurl.TOTAL_TIME)
    http_size = c.getinfo(pycurl.SIZE_DOWNLOAD)
    print 'http_code http_size conn_time pre_tran start_tran total_time'
    print "%d %d %f %f %f %f"%(http_code,http_size,http_conn_time,http_pre_tran,http_start_tran,http_total_time)
if __name__ == '__main__':
    input_url = sys.argv[1]
    test_gzip(input_url)

脚本运行效果

xu:~/curl$ python pycurl_test.py http://daxuxu.info/
http_code http_size conn_time pre_tran start_tran total_time
200 8703 0.748147 0.748170 1.632642 1.636552

pycurl 的一些响应信息:
(参考: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html )

pycurl.NAMELOOKUP_TIME 域名解析时间
pycurl.CONNECT_TIME 远程服务器连接时间
pycurl.PRETRANSFER_TIME 连接上后到开始传输时的时间
pycurl.STARTTRANSFER_TIME 接收到第一个字节的时间
pycurl.TOTAL_TIME 上一请求总的时间
pycurl.REDIRECT_TIME 如果存在转向的话,花费的时间

pycurl.EFFECTIVE_URL
pycurl.HTTP_CODE HTTP 响应代码
pycurl.REDIRECT_COUNT 重定向的次数
pycurl.SIZE_UPLOAD 上传的数据大小
pycurl.SIZE_DOWNLOAD 下载的数据大小
pycurl.SPEED_UPLOAD 上传速度
pycurl.HEADER_SIZE 头部大小
pycurl.REQUEST_SIZE 请求大小
pycurl.CONTENT_LENGTH_DOWNLOAD 下载内容长度
pycurl.CONTENT_LENGTH_UPLOAD 上传内容长度
pycurl.CONTENT_TYPE 内容的类型
pycurl.RESPONSE_CODE 响应代码
pycurl.SPEED_DOWNLOAD 下载速度
pycurl.SSL_VERIFYRESULT
pycurl.INFO_FILETIME 文件的时间信息

pycurl.HTTP_CONNECTCODE HTTP 连接代码
pycurl.HTTPAUTH_AVAIL
pycurl.PROXYAUTH_AVAIL
pycurl.OS_ERRNO
pycurl.NUM_CONNECTS
pycurl.SSL_ENGINES
pycurl.INFO_COOKIELIST
pycurl.LASTSOCKET
pycurl.FTP_ENTRY_PATH
Python 相关文章推荐
Python中使用中文的方法
Feb 19 Python
python采用getopt解析命令行输入参数实例
Sep 30 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
django站点管理详解
Dec 12 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
Python列表(list)常用操作方法小结
Feb 02 #Python
Python Sleep休眠函数使用简单实例
Feb 02 #Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 #Python
Python实现二分法算法实例
Feb 02 #Python
Python标准异常和异常处理详解
Feb 02 #Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 #Python
Python列表append和+的区别浅析
Feb 02 #Python
You might like
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
初始Nodejs
2014/11/08 NodeJs
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
Python正规则表达式学习指南
2016/08/02 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
解决Python使用列表副本的问题
2019/12/19 Python
python 爬取疫情数据的源码
2020/02/09 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
实习评语大全
2014/04/26 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
廉洁自律证明
2015/06/24 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android