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操作json数据的一个简单例子
Apr 17 Python
Python 3.x 新特性及10大变化
Jun 12 Python
django反向解析和正向解析的方式
Jun 05 Python
python实现电子产品商店
Feb 26 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python正则-re的用法详解
Jul 28 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
keras打印loss对权重的导数方式
Jun 10 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 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
关于手调机和数调机的选择
2021/03/02 无线电
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
PHP处理会话函数大总结
2015/08/05 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
详解js闭包
2014/09/02 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
浅谈Python中的数据类型
2015/05/05 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
公司聚餐通知
2015/04/22 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android