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 Web开发框架Django
Jun 30 Python
基于Python的身份证号码自动生成程序
Aug 15 Python
Python中正则表达式的详细教程
Apr 30 Python
在Python中操作字典之setdefault()方法的使用
May 21 Python
python如何实现远程控制电脑(结合微信)
Dec 21 Python
python实现简易云音乐播放器
Jan 04 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
浅析Python 多行匹配模式
Jul 24 Python
python raise的基本使用
Sep 10 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
Session保存到数据库的php类分享
2011/10/24 PHP
php数组编码转换示例详解
2014/03/11 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
关于php开启错误提示的总结
2019/09/24 PHP
ExtJs使用总结(非常详细)
2012/03/22 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
淘宝客服专员岗位职责
2014/04/11 职场文书
公司离职证明样本
2014/09/13 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server