httplib是一個相對底層的http請求模塊,其上有專門的包裝模塊,如urllib內建模塊,goto等第三方模塊,可是封裝的越高就越不靈 活,好比urllib模塊裏請求錯誤時就不會返回結果頁的內容,只有頭信息,對於某些須要檢測錯誤請求返回值的場景就不適用,因此就得用這個模塊了。html
一、class httplib.HTTPConnection
python
說明:
該類用於建立一個http類型的請求連接
原型:
HTTPConnection(host[, port[, strict[, timeout]]])
host: 請求的服務器host,不能帶http://開頭
port: 服務器web服務端口
strict: 是否嚴格檢查請求的狀態行,就是http1.0/1.1 協議版本的那一行,即請求的第一行,默認爲False,爲True時檢查錯誤會拋異常
timeout: 單次請求的超時時間,沒有時默認使用httplib模塊內的全局的超時時間web
實例: conn1 = HTTPConnection('www.baidu.com:80') conn2 = HTTPconnection('www.baidu.com',80) conn3 = HTTPConnection('www.baidu.com',80,True,10) 錯誤實例: conn3 = HTTPConnection('www.baidu.com:80',True,10)
返回:
HTTPConnection類會實例並返回一個HTTPConnection對象
二、class httplib.HTTPSConnection
說明:
該類用於建立一個https類型的請求連接
原型:
HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout]]]]])
key_file:一個包含PEM格式的私鑰文件
cert_file:一個包含PEM格式的認證文件
other:其它同http參數
實例:服務器
conn3 = HTTPSConnection('accounts.google.com',443,key_file,cert_file,True,10)
返回:
一樣返回一個HTTPSConnection對象
注意:
要建立https連接,必需要保證底層的socket模塊是支持ssl的編譯模式,即編譯時ssl選項的開關是開着的
三、HTTPConnection對象request方法:
說明:
發送一個請求
原型:
conn.request(method, url[, body[, headers]])
method: 請求的方式,如'GET','POST','HEAD','PUT','DELETE'等
url: 請求的網頁路徑。如:'/index.html'
body: 請求是否帶數據,該參數是一個字典
headers: 請求是否帶頭信息,該參數是一個字典,不過鍵的名字是指定的http頭關鍵字
實例:
app
conn.request('GET', '/', '', {'user-agent':'test'})
返回:
無返回,其實就是相對於向服務其發送數據,可是沒有最後回車
四、HTTPConnection對象getresponse方法
說明:
獲取一個http響應對象,至關於執行最後的2個回車
原型/實例:socket
res = conn.getresponse()
返回:
HTTPResponse對象
五、HTTPConnection對象close()方法
說明:
關閉指定的httpconnect連接
實例:
google
conn.close()
六、HTTPResponse對象read方法
說明:
得到http響應的內容部分,即網頁源碼
原型:
body = res.read([amt])
amt: 讀取指定長度的字符,默認爲空,即讀取全部內容
實例:
url
body = res.read() pbody = res.read(10)
返回:
網頁內容字符串
七、HTTPResponse對象的其它方法或屬性
方法:
getheaders()
得到全部的響應頭內容,是一個元組列表[(name,value),(name2,value2)]
getheader(name[,default])
得到指定的頭內容
fileno()
socket的fileno
屬性:
msg
全部的頭信息,和getheaders方法同樣,只不過這個是原始未處理的字符串
status
當次請求的狀態
version
當次請求的http協議版本,10是http1.0, 11是http/1.1
reason
當次請求的結果的表述內容,200是ok,404是Not Found
整體實例:
code
#!/usr/bin/env python # -*- coding: utf-8 -*- import httplib import urllib def sendhttp(): data = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'}) headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} conn = httplib.HTTPConnection('bugs.python.org') conn.request('POST', '/', data, headers) httpres = conn.getresponse() print httpres.status print httpres.reason print httpres.read() if __name__ == '__main__': sendhttp()
固然還有其它的一些信息,好比異常類型,好比http的code對應表及查詢字典等等,能夠直接參考官網httplib文檔:http://docs.python.org/library/httplib.htmlorm