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

 更新时间:2015年02月02日 10:18:39   投稿:junjie  
这篇文章主要介绍了Python中用pycurl监控http响应时间脚本分享,本文脚本实现监控http相应码,响应大小,建立连接时间,准备传输时间,传输第一个字节时间,完成时间,需要的朋友可以参考下

最近需要对节点到源站自己做个监控,简单的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基础操作列表切片解析

    列表和字符串一样,列表同样可以截取和被索引,列表被截取后返回一个包含所需元素的新列表,List中的元素是可以改变的,需要的朋友可以参考下
    2023-04-04
  • python使用datetime模块处理日期时间及常用功能详解

    python使用datetime模块处理日期时间及常用功能详解

    datetime模块是Python标准库中用于处理日期和时间的模块,在本节中,我们将介绍datetime模块的一些常用功能,并通过实例代码详细讲解每个知识点,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-06-06
  • Python MySQL数据库基本操作及项目示例详解

    Python MySQL数据库基本操作及项目示例详解

    这篇文章主要介绍了Python连接MySQL数据库后的一些基本操作,并以银行管理系统项目为例,为大家具体介绍了一下部分功能的实现,文中的示例代码具有一定的学习价值,感兴趣的可以了解一下
    2021-12-12
  • python遍历目录的方法小结

    python遍历目录的方法小结

    这篇文章主要介绍了python遍历目录的方法,总结分析了Python常用的两种目录遍历技巧,需要的朋友可以参考下
    2016-04-04
  • python语言中pandas字符串分割str.split()函数

    python语言中pandas字符串分割str.split()函数

    分列在我们日常工作中经常用到,从各种系统中导出的什么订单号、名称、日期很多都是复合组成的,这些列在匹配、合并时没有办法使用,我们经常需要将她们分开,下面这篇文章主要给大家介绍了关于python语言中pandas字符串分割str.split()函数的相关资料,需要的朋友可以参考下
    2022-08-08
  • windows下wxPython开发环境安装与配置方法

    windows下wxPython开发环境安装与配置方法

    这篇文章主要介绍了windows下wxPython开发环境安装与配置方法,需要的朋友可以参考下
    2014-06-06
  • python读取LMDB中图像的方法

    python读取LMDB中图像的方法

    这篇文章主要为大家详细介绍了python读取LMDB中图像的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 详解用 python-docx 创建浮动图片

    详解用 python-docx 创建浮动图片

    这篇文章主要介绍了详解用 python-docx 创建浮动图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 一些Python中的二维数组的操作方法

    一些Python中的二维数组的操作方法

    这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下
    2015-05-05
  • pytest官方文档解读fixtures的autouse

    pytest官方文档解读fixtures的autouse

    这篇文章主要为大家介绍了pytest官方文档解读fixtures的autouse,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论