1.pycurl.Curl() 類實現創建一個 libcurl 包的 Curl 句柄對象無參數。更多關於 libcurl 包的
介紹見 http://curl.haxx.se/libcurl/c/libcurl-tutorial.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可以是一個字符串、整型、
長整型、文件對象、列表或函數等。下面列舉常用的常量列表
c = 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") # 指定請求的 URL
c.setopt(pycurl.USERAGENT,"Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1;
c.setopt(pycurl.HEADERFUNCTION, getheader) # 將返回的 HTTP HEADER 定向到回調函數 getheader
c.setopt(pycurl.WRITEFUNCTION, getbody) # 將返回的內容定向到回調函數 getbody
c.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 頭部大小
2.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import pycurl
import time
import os,sys
URL = "www.baidu.com"
c = pycurl.Curl()
c.setopt(pycurl.URL,URL)
c.setopt(pycurl.CONNECTTIMEOUT, 30)
c.setopt(pycurl.TIMEOUT, 30)
c.setopt(pycurl.NOPROGRESS, 1)
c.setopt(pycurl.FORBID_REUSE, 1)
c.setopt(pycurl.MAXREDIRS, 1)
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)
indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")
c.setopt(pycurl.WRITEHEADER, indexfile)
c.setopt(pycurl.WRITEDATA, indexfile)
try:
c.perform()
except Exception,e:
print "commection error:" +str(e)
indexfile.close()
c.close()
sys.exit()
NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
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)
SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
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" %(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()
生成content.txt的文本
3.原本自動化運維裏使用的是www.google.com.hk的URL但是出現commection error:(7, 'Failed to connect to www.google.com.hk port 80: Timed out')
就把URL改成URL = "www.baidu.com"就可以正常用了