標籤:python pycurl模組 學習
pycurl模組的安裝方法如下:easy_install pycurl #easy_install安裝方法pip install pycurl #pip安裝方法#源碼安裝方法# 要求curl-config包支援,需要源碼方式重新安裝curl# wget http://curl.haxx.se/download/curl-7.36.0.tar.gz# tar -zxvf curl-7.36.0.tar.gz# cd curl-7.36.0# ./configure# make && make install# export LD_LIBRARY_PATH=/usr/local/lib## wget https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz --no-check-certificate# tar -zxvf pycurl-7.19.3.1.tar.gz# cd pycurl-7.19.3.1# python setup.py install --curl-config=/usr/local/bin/curl-config模組常用方法說明pycurl.Curl()類實現建立一個libcurl包的Curl控制代碼對象,無參數。更多關於libcurl包的介紹見http://curl.haxx.se/libcurl/c/libcurltutorial.html。下面介紹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.Curl() #建立一個curl對象c.setopt(pycurl.CONNECTTIMEOUT, 5) #串連的等待時間,設定為0則不等待c.setopt(pycurl.TIMEOUT, 5) #請求逾時時間c.setopt(pycurl.NOPROGRESS, 0) #是否屏蔽下載進度條,非0則屏蔽c.setopt(pycurl.MAXREDIRS, 5) #指定HTTP重新導向的最大數c.setopt(pycurl.FORBID_REUSE, 1) #完成互動後強制中斷連線,不重用c.setopt(pycurl.FRESH_CONNECT,1) #強制擷取新的串連,即替代緩衝中的串連c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) #設定儲存DNS資訊的時間,預設為120秒c.setopt(pycurl.URL,"http://www.baidu.com") #指定請求的URLc.setopt(pycurl.USERAGENT,"Mozilla/5.2 (compatible; MSIE 6.0; WindowsNT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)") #配置請求HTTP頭的User-Agentc.setopt(pycurl.HEADERFUNCTION, getheader) #將返回的HTTP HEADER定向到回呼函數getheaderc.setopt(pycurl.WRITEFUNCTION, getbody) #將返回的內容定向到回呼函數getbodyc.setopt(pycurl.WRITEHEADER, fileobj) #將返回的HTTP HEADER定向到fileobj檔案對象c.setopt(pycurl.WRITEDATA, fileobj) #將返回的HTML內容定向到fileobj檔案對象·getinfo(option)方法,對應libcurl包中的curl_easy_getinfo方法,參數option是通過libcurl的常量來指定的。下面列舉常用的常量列表:c = pycurl.Curl() #建立一個curl對象c.getinfo(pycurl.HTTP_CODE) #返回的HTTP狀態代碼c.getinfo(pycurl.TOTAL_TIME) #傳輸結束所消耗的總時間c.getinfo(pycurl.NAMELOOKUP_TIME) #DNS解析所消耗的時間c.getinfo(pycurl.CONNECT_TIME) #建立串連所消耗的時間c.getinfo(pycurl.PRETRANSFER_TIME) #從建立串連到準備傳輸所消耗的時間c.getinfo(pycurl.STARTTRANSFER_TIME) #從建立串連到傳輸開始消耗的時間c.getinfo(pycurl.REDIRECT_TIME) #重新導向所消耗的時間c.getinfo(pycurl.SIZE_UPLOAD) #上傳資料包大小c.getinfo(pycurl.SIZE_DOWNLOAD) #下載資料包大小c.getinfo(pycurl.SPEED_DOWNLOAD) #平均下載速度c.getinfo(pycurl.SPEED_UPLOAD) #平均上傳速度c.getinfo(pycurl.HEADER_SIZE) #HTTP頭部大小
#!/usr/bin/env python#_*_coding:utf-8 _*___author__ = ‘gaogd‘import os,sysimport timeimport sysimport pycurlURL="http://www.baidu.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秒#建立一個檔案對象,以”wb”方式開啟,用來儲存返回的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: #pass c.perform() #提交請求except Exception as e: print "connecion 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 byte" %(HEADER_SIZE)print "平均下載速度:%d bytes/s" %(SPEED_DOWNLOAD)#關閉檔案及Curl對象indexfile.close()c.close()
本文出自 “奮鬥吧” 部落格,請務必保留此出處http://lvnian.blog.51cto.com/7155281/1871808
Python pycurl模組 學習