Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享
最近需要對(duì)節(jié)點(diǎn)到源站自己做個(gè)監(jiān)控,簡(jiǎn)單的ping可以檢測(cè)到一些東西,但是http請(qǐng)求的檢查也要進(jìn)行,于是就研究了下pycurl。
pycurl是個(gè)用c語(yǔ)言實(shí)現(xiàn)的python 庫(kù),雖然據(jù)說(shuō)不是那么pythonic,但是卻很高效,它支持的協(xié)議居多:
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!
這一堆協(xié)議已經(jīng)很多了,我需要就是http一個(gè),相對(duì)urlib來(lái)說(shuō),這個(gè)庫(kù)可能更快些。
以下這個(gè)腳本是對(duì)某一個(gè)給定的url進(jìn)行檢查,并打印出http相應(yīng)碼,響應(yīng)大小,建立連接時(shí)間,準(zhǔn)備傳輸時(shí)間,傳輸?shù)谝粋€(gè)字節(jié)時(shí)間,完成時(shí)間。
#!/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)
腳本運(yùn)行效果
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 的一些響應(yīng)信息:
(參考: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html )
pycurl.NAMELOOKUP_TIME 域名解析時(shí)間 pycurl.CONNECT_TIME 遠(yuǎn)程服務(wù)器連接時(shí)間 pycurl.PRETRANSFER_TIME 連接上后到開(kāi)始傳輸時(shí)的時(shí)間 pycurl.STARTTRANSFER_TIME 接收到第一個(gè)字節(jié)的時(shí)間 pycurl.TOTAL_TIME 上一請(qǐng)求總的時(shí)間 pycurl.REDIRECT_TIME 如果存在轉(zhuǎn)向的話,花費(fèi)的時(shí)間 pycurl.EFFECTIVE_URL pycurl.HTTP_CODE HTTP 響應(yīng)代碼 pycurl.REDIRECT_COUNT 重定向的次數(shù) pycurl.SIZE_UPLOAD 上傳的數(shù)據(jù)大小 pycurl.SIZE_DOWNLOAD 下載的數(shù)據(jù)大小 pycurl.SPEED_UPLOAD 上傳速度 pycurl.HEADER_SIZE 頭部大小 pycurl.REQUEST_SIZE 請(qǐng)求大小 pycurl.CONTENT_LENGTH_DOWNLOAD 下載內(nèi)容長(zhǎng)度 pycurl.CONTENT_LENGTH_UPLOAD 上傳內(nèi)容長(zhǎng)度 pycurl.CONTENT_TYPE 內(nèi)容的類型 pycurl.RESPONSE_CODE 響應(yīng)代碼 pycurl.SPEED_DOWNLOAD 下載速度 pycurl.SSL_VERIFYRESULT pycurl.INFO_FILETIME 文件的時(shí)間信息 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
相關(guān)文章
Python實(shí)現(xiàn)識(shí)別手寫數(shù)字 Python圖片讀入與處理
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)識(shí)別手寫數(shù)字,Python圖片的讀入與處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01PyCharm創(chuàng)建Django項(xiàng)目的簡(jiǎn)單步驟記錄
PyCharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,下面這篇文章主要給大家介紹了關(guān)于利用PyCharm創(chuàng)建Django項(xiàng)目的簡(jiǎn)單步驟,需要的朋友可以參考下2022-07-07Python超簡(jiǎn)單容易上手的畫圖工具庫(kù)推薦
今天小編給大家分享一款很棒的python畫圖工具庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-05-05Python報(bào)錯(cuò)AssertionError:can only test a c
這篇文章主要介紹了Python報(bào)錯(cuò)AssertionError:can only test a child proc問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09OPENAI?API?微調(diào)?GPT-3?的?Ada?模型
這篇文章主要為大家介紹了OPENAI?API?微調(diào)?GPT-3?的?Ada?模型使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征
今天小編就為大家分享一篇pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python控制自己的手機(jī)攝像頭拍照并自動(dòng)發(fā)送到郵箱案例講解
這篇文章主要介紹了Python控制自己的手機(jī)攝像頭拍照,并把照片自動(dòng)發(fā)送到郵箱,大概思路是通過(guò)opencv調(diào)用攝像頭拍照保存圖像本地用email庫(kù)構(gòu)造郵件內(nèi)容,保存的圖像以附件形式插入郵件內(nèi)容用smtplib庫(kù)發(fā)送郵件到指定郵箱,需要的朋友可以參考下2022-04-04