Python學習筆記-實現探測Web服務品質

來源:互聯網
上載者:User

標籤:下載速度   web   python   服務品質   

    pycurl是一個用C語言寫的libcurl Python實現,功能非常強大,支援的操作協議後FTP、HTTP、HTTPS、TELNET等,可以理解成Linux下curl命令功能的Python封裝,簡單易用

    本例通過調用pycurl提供的方法,實現探測Web服務品質的情況,比如響應HTTP狀態代碼、請求延時、HTTP頭資訊、下載速度等,利用這些資訊可以定位服務響應慢的具體環節。

    pycurl.Curl()類實現建立一個libcurl包的Curl控制代碼對象,無參數。

    close()方法,對應的libcurl包中的curl_easy_cleanup方法,無參數,實現關閉、回收Curl對象。

    perform()方法,對應libcurl包中的curl_easy_perform方法,無參數,實現Curl對象請求的提交。

    setopt(option,value)方法,對應libcurl包中的curl_easy_setopt方法,參數option是通過libcurl的常量來指定的,參數value的值依賴option,可以是一個字串、整型、長整型、檔案對象、列表或函數等

安裝pycurl模組

[[email protected] ~]# python3 -m easy_install -i http://pypi.douban.com/simple/ pycurl

報錯:

setuptools.sandbox.UnpickleableException: ConfigurationError("Could not run curl-config: [Errno 2] No such file or directory: ‘curl-config‘",)


先安裝libcurl-devel解決:

[[email protected] ~]# yum -y install libcurl-devel[[email protected] ~]# python3 -m easy_install -i http://pypi.douban.com/simple/ pycurlFinished processing dependencies for pycurl
#!/usr/bin/python3# _*_ coding:utf-8 _*_import sys,osimport timeimport pycurlurl = "http://fm.mykurol.com"   #探測的目標URLc = pycurl.Curl()   #建立一個Curl對象c.setopt(pycurl.URL,url)    #定義請求的URL常量c.setopt(pycurl.CONNECTTIMEOUT,5)   #定義請求串連的等待時間c.setopt(pycurl.TIMEOUT,5)      #定義請求逾時時間c.setopt(pycurl.NOPROGRESS,1)       #屏蔽下載進度條c.setopt(pycurl.FORBID_REUSE,1)     #完成互動後強制中斷連線,不重用c.setopt(pycurl.MAXREDIRS,1)        #指定HTTP重新導向的最大數為1c.setopt(pycurl.DNS_CACHE_TIMEOUT,30)       #設定儲存DNS資訊的時間為30秒#建立一個檔案對象,以"web"方式開啟,用來儲存返回的http頭部及頁面內容indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")c.setopt(pycurl.WRITEHEADER, indexfile)     #將返回的HTTP HEADER定向到indexfile檔案c.setopt(pycurl.WRITEDATA, indexfile)       #將返回的HTML內容定向到indexfile檔案對象try:    c.perform()except Exception as e:    print ("connection error:"+str(e))    indexfile.close()    c.close()    sys.exit()NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)  #擷取DNS解析時間CONNECT_TIME = c.getinfo(c.CONNECT_TIME)    #擷取建立連線時間PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME)    #擷取從建立串連到準備傳輸所消耗的時間STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)    #擷取從建立串連到傳輸開始消耗的時間TOTAL_TIME = c.getinfo(c.TOTAL_TIME)    #擷取傳輸的總時間HTTP_CODE = c.getinfo(c.HTTP_CODE)      #擷取HTTP狀態代碼SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)      #擷取下載資料包的大小HEADER_SIZE = c.getinfo(c.HEADER_SIZE)      #擷取HTTP頭部大小SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)    #擷取平均下載速度#列印輸出相關資料print ("HTTP狀態代碼:%s" % (HTTP_CODE))print ("DNS解析時間:%.2f ms" % (NAMELOOKUP_TIME*1000))print ("建立連線時間:%.2f ms" % (CONNECT_TIME*1000))print ("準備傳輸時間:%.2f ms" % (PRETRANSFER_TIME*1000))print ("傳輸開始時間:%.2f ms" % (STARTTRANSFER_TIME*1000))print ("傳輸結束總時間:%.2f ms" % (TOTAL_TIME*1000))print ("下載資料包大小:%d bytes/s" % (SIZE_DOWNLOAD))print ("HTTP頭部大小:%d bytes/s" % (HEADER_SIZE))print ("平均下載速度:%d bytes/s" % (SPEED_DOWNLOAD))#關閉檔案及curl對象indexfile.close()c.close()


執行結果:

HTTP狀態代碼:200DNS解析時間:17.44 ms建立連線時間:17.88 ms準備傳輸時間:17.89 ms傳輸開始時間:39.79 ms傳輸結束總時間:39.88 ms下載資料包大小:2526 bytes/sHTTP頭部大小:389 bytes/s平均下載速度:63333 bytes/s

查看擷取的HTTP檔案頭部及頁面內容content.txt

HTTP/1.1 200 OKDate: Fri, 09 Jun 2017 03:01:46 GMTServer: Apache/2.2.15 (CentOS)X-Powered-By: PHP/5.3.3Set-Cookie: PHPSESSID=qmhmq2hkbb3v5hs67rf38c5006; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Pragma: no-cacheContent-Length: 2526Connection: closeContent-Type: text/html; charset=UTF-8  <!doctype html><link href="css.css" rel="stylesheet" type="text/css" /><title>MyKurol電影推薦網</title><link rel="icon" href="image/logo.ico" type="img/x-ico" /><body><link rel="icon" href="image/logo.ico" type="img/x-ico" /><div class="in">    <div class="header">        <div class="mykurol">            <a href="index.php" class="biaoyu"><strong>本網站由謝育政設計</strong></a>        </div>        <div class="key-sousuo">            <input type="text" name="mo_key" placeholder="電影/導演/演員">            <input type="submit" name="mo_sub" value="搜尋">        </div>        <div class="Inlogin">            <a href="MovEncy.php" class="movie-ency">電影大全</a>            <a href="#" class="movie-guess">猜一猜</a>            <a href="#" class="movie-album">電影專輯</a>            <a href="login.php" class="login-sub">登入</a><a href="reg.php" class="reg-sub">註冊</a>        </div>    </div></div><div style="z-index:999; position:absolute; right: 20px; bottom:40%"><div>    <img src="image/1495501340.png" style="width:120px;"/>    </div>    <div style="padding:0; margin:0; background-color:#FFF; width:120px; height:30px">    <a style="color:#666; font-size:12px;">友情連結:<a href="http://www.mygdmec.cn" style="text-decoration:none; color:#F9F; font-size:12px">凡夢購物網</a>    </div></div>        <div class="body">            <div class="flo">                <div class="flo-biaoti">                    <p href="#" class="movie-name" data-toggle="tooltip" title="《生化危機6》的詳細介紹"><strong>生化危機6</strong></p>                    <p class="movie-jieshao">                        在華盛頓特區愛麗絲被威斯克背叛後人類幾乎要失去最後的希望。作為唯一的倖存者,也是人類對抗殭屍大軍的最後防線,愛麗絲必須回到噩夢開始的地方——浣熊市。在那裡保護傘公司正在集結所有的力量企圖對殘餘的倖存者發起最後的打擊。<br>                        導演:保羅·安德森<br>                        主演:米拉·喬沃維奇 ,伊恩·格雷,艾麗·拉特,魯比·羅絲,李准基,肖恩·羅伯茨,威廉·利維,伊恩·馬肯 <br>                        動作 / 驚悚 / 科幻                    </p>                </div>             </div>         </div>        <div class="foot">         </div>    </div></body>


本文出自 “謝育政” 部落格,請務必保留此出處http://kurolz.blog.51cto.com/11433546/1935054

Python學習筆記-實現探測Web服務品質

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.