Python中用pycurl监控http响应时间脚本分享
程序员文章站
2022-06-20 21:07:01
最近需要对节点到源站自己做个监控,简单的ping可以检测到一些东西,但是http请求的检查也要进行,于是就研究了下pycurl。
pycurl是个用c语言实现的pytho...
最近需要对节点到源站自己做个监控,简单的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 的一些响应信息:
(参考: )
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动态加载模块的3种方法
下一篇: 封装了jQuery的Ajax请求全局配置