最近需要對節點到源站自己做個監控,簡單的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
|
新聞熱點
疑難解答