Python中用pycurl監控http回應時間指令碼分享

來源:互聯網
上載者:User
最近需要對節點到來源站點自己做個監控,簡單的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-8import StringIOimport pycurlimport sysimport osclass Test:    def __init__(self):        self.contents = ''    def body_callback(self,buf):        self.contents = self.contents + bufdef 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_time200 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_URLpycurl.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_VERIFYRESULTpycurl.INFO_FILETIME 檔案的時間資訊pycurl.HTTP_CONNECTCODE HTTP 串連代碼pycurl.HTTPAUTH_AVAILpycurl.PROXYAUTH_AVAILpycurl.OS_ERRNOpycurl.NUM_CONNECTSpycurl.SSL_ENGINESpycurl.INFO_COOKIELISTpycurl.LASTSOCKETpycurl.FTP_ENTRY_PATH
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.