Python中用pycurl监控http响应时间脚本分享
最近需要对节点到源站自己做个监控,简单的ping可以检测到一些东西,但是http请求的检查也要进行,于是就研究了下pycurl。
pycurl是个用c语言实现的python库,虽然据说不是那么pythonic,但是却很高效,它支持的协议居多:
supportingFTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILEandLDAP.libcurlsupportsHTTPScertificates,HTTPPOST,HTTPPUT,FTPuploading,kerberos,HTTPformbasedupload,proxies,cookies,user+passwordauthentication,filetransferresume,httpproxytunnelingandmore!
这一堆协议已经很多了,我需要就是http一个,相对urlib来说,这个库可能更快些。
以下这个脚本是对某一个给定的url进行检查,并打印出http相应码,响应大小,建立连接时间,准备传输时间,传输第一个字节时间,完成时间。
#!/usr/bin/python
#coding:UTF-8
importStringIO
importpycurl
importsys
importos
classTest:
def__init__(self):
self.contents=''
defbody_callback(self,buf):
self.contents=self.contents+buf
deftest_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_codehttp_sizeconn_timepre_transtart_trantotal_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$pythonpycurl_test.pyhttp://daxuxu.info/ http_codehttp_sizeconn_timepre_transtart_trantotal_time 20087030.7481470.7481701.6326421.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_CODEHTTP响应代码 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_CONNECTCODEHTTP连接代码 pycurl.HTTPAUTH_AVAIL pycurl.PROXYAUTH_AVAIL pycurl.OS_ERRNO pycurl.NUM_CONNECTS pycurl.SSL_ENGINES pycurl.INFO_COOKIELIST pycurl.LASTSOCKET pycurl.FTP_ENTRY_PATH