Python中用pycurl监控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
(0)

相关推荐

  • PHP curl 获取响应的状态码的方法

    PHP curl可以从服务器端模拟一个http请求,例如抓取网页.模拟登陆等.根据选项设置,可以在curl_exec的返回结果中获取到响应头和body,但这没有响应的状态吗.想要获取状态码,需要在执行curl_exec后再通过curl_getinfo来获取.例如: 复制代码 代码如下: $ch = curl_init (); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com.hk'); curl_setopt($ch, CURLOPT_TI

  • 使用Curl命令查看请求响应时间方法

    curl命令查看请求响应时间 # curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" http://www.36nu.com 0.014::0.015::0.018::0.019::1516256.00 -o:把curl 返回的html.js 写到垃圾回收站[ /dev/null] -s:去掉所有状

  • Python中用pycurl监控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 PU

  • 利用Python编写的实用运维脚本分享

    目录 1. 执行外部程序或命令 2. 文件和目录操作(命名.删除.拷贝.移动等) 3. 创建和解包归档文件 参考 Python在很大程度上可以对shell脚本进行替代.笔者一般单行命令用shell,复杂点的多行操作就直接用Python了.这篇文章就归纳一下Python的一些实用脚本操作. 1. 执行外部程序或命令 我们有以下C语言程序cal.c(已编译为.out文件),该程序负责输入两个命令行参数并打印它们的和.该程序需要用Python去调用C语言程序并检查程序是否正常返回(正常返回会返回 0)

  • Python实现自动玩连连看的脚本分享

    目录 序言 实现步骤 全部代码 序言 最近女朋友在玩连连看,玩了一个星期了还没通关,真的是菜. 我实在是看不过去了,直接用python写了个脚本代码,一分钟一把游戏. 快是快,就是联网玩容易被骂,嘿嘿~ 实现步骤 模块导入 import cv2 import numpy as np import win32api import win32gui import win32con from PIL import ImageGrab import time import random 窗体标题 用于定

  • Python实现校园网自动登录的脚本分享

    目录 背景 思路 技术点 碎碎念 代码 背景 我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了. 但这种登录方式有个缺点:登录状态不会一直保持下去.即过一段时间就会掉线,然后你需要重新登陆才行.这个时间大概是一天. 这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑) 这个时候可以用python脚本解决这个问题! 思路 写一个死循环一直 ping 8.8.8.8,如果 ping 通说明正连着网,进入

  • Python实现自动回复讨论功能的脚本分享

    目录 好久不见 实现过程 一步拿捏讨论 美图 好久不见 写这篇文章只是想证明一下:本博主还在呼吸 许久未更,甚是想更呐~ 这段时间生活中充斥着各种事情,感觉每天都在忙忙碌碌,偶而停下疲惫的身躯,突然抬头,却不知自己身处何方,忙了这么久,到底在忙些什么呢?找不着方向,于是开始惶恐,便又不知方向的胡乱奔走……,好吧好吧,总结两个字:迷茫,再加两个字:瞎忙…… 其实这几天一直想写博客的,想写有趣又轻松的一篇文章,但又不到写哪些内容比较好,又因还要解决各种事情,于是就搁到了现在…… 直到某天,为了完成M

  • Python实现的监测服务器硬盘使用率脚本分享

    此脚本主要用于zabbix监控系统硬盘只用,适用于windows和linux系统,返回值为0为正常,有几个分区的硬盘剩余少于10G或低于10%就为报警阀值(windows的C盘和linux的根分区除外): 复制代码 代码如下: #!/bin/env python # -*- coding: utf-8 -*- ########################################################## # @This script is used to check dis

  • python实时分析日志的一个小脚本分享

    前言 大家都知道Web运维总要关注相关域名的实时2xx/s.4xx/s.5xx/s.响应时间.带宽等这些指标,之前的日志是五分钟一分割,简单的用awk就可以了,现在由于要推送日志到ELK,继续之前五分钟一分割会有问题,就改为一天分割一次.改成一天一分割后,显然再继续用Shell就不合适了,于是就用Python写了下. 方法如下: 脚本主要运用了文件的seek和tell函数,原理如下: 1.加入crontab,每5分钟执行一次 2.只分析从上次读取日志文件的结束位置到这次读取文件时的末尾位置之间的

  • Oracle 监控索引使用率脚本分享

    Oracle提供了索引监控特性来判断索引是否被使用.在Oracle 10g中,收集统计信息会使得索引被监控,在Oracle 11g中该现象不复存在.尽管如此,该方式仅提供的是索引是否被使用.索引被使用的频率未能得以体现.下面的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进. 1.索引使用频率报告 --运行环境 SQL> select * from v$version where rownum<2; BANNER -----------

  • Python实现的生成自我描述脚本分享(很有意思的程序)

    自我描述的语句指这样一种语句:它的内容就是对它本身的描述.(废话--)比如下面这句句子: 复制代码 代码如下: 这是一段自我描述的语句,除了标点符号外,它共包含125个字符,其中33个"个",29个"2",5个"3",3个"符",3个"5",2个"一",2个"它",2个"包",2个"的",2个"标",2个&q

  • 简单谈谈Python的pycurl模块

    pycurl是一个用c语言编写的libcurl Python实现,功能非常强大,支持操作协议有FTP,HTTP,HTTPS,TELNET等. 模块的常用方法说明: close()方法,对应libcurl包中的curl_easy_cleanup方法,无参数,实现关闭.回收Curl对象. ·perform()方法,对应libcurl包中的curl_easy_perform方法,无参数,实现Curl对象请求的提交. ·setopt(option,value)方法,对应libcurl包中的curl_ea

随机推荐