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编程入门的一些基本知识
May 13 Python
Django学习教程之静态文件的调用详解
May 08 Python
python读取和保存图片5种方法对比
Sep 12 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
Django+Celery实现动态配置定时任务的方法示例
May 26 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Flask response响应的具体使用
Jul 15 Python
Python&Matlab实现樱花的绘制
Apr 07 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python简单实现基数排序算法
2015/05/16 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python简易版停车管理系统
2019/08/12 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
文明风采获奖感言
2014/02/18 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
给小学生的新年寄语
2014/04/04 职场文书
安全承诺书
2015/01/19 职场文书
美术教师个人工作总结
2015/02/06 职场文书
汉字听写大会观后感
2015/06/12 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL