httplib是一個相對底層的http請求模組,其上有專門的封裝模組,如urllib內建模組,goto等第三方模組,但是封裝的越高就越不靈活,比如urllib模組裡請求錯誤時就不會返回結果頁的內容,只有頭資訊,對於某些需要檢測錯誤請求傳回值的情境就不適用,所以就得用這個模組了。
1、class httplib.HTTPConnection
說明:
該類用於建立一個http類型的請求連結
原型:
HTTPConnection(host[, port[, strict[, timeout]]])
host: 請求的伺服器host,不能帶http://開頭
port: 伺服器web服務連接埠
strict: 是否嚴格檢查請求的狀態行,就是http1.0/1.1 協議版本的那一行,即請求的第一行,預設為False,為True時檢查錯誤會拋異常
timeout: 單次請求的逾時時間,沒有時預設使用httplib模組內的全域的逾時時間
執行個體: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對象
2、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選項的開關是開著的
3、HTTPConnection對象request方法:
說明:
發送一個請求
原型:
conn.request(method, url[, body[, headers]])
method: 請求的方式,如'GET','POST','HEAD','PUT','DELETE'等
url: 請求的網頁路徑。如:'/index.html'
body: 請求是否帶資料,該參數是一個字典
headers: 請求是否帶頭資訊,該參數是一個字典,不過鍵的名字是指定的http頭關鍵字
執行個體:
conn.request('GET', '/', '', {'user-agent':'test'})
返回:
無返回,其實就是相對於向服務其發送資料,但是沒有最後斷行符號
4、HTTPConnection對象getresponse方法
說明:
擷取一個http響應對象,相當於執行最後的2個斷行符號
原型/執行個體:
res = conn.getresponse()
返回:
HTTPResponse對象
5、HTTPConnection對象close()方法
說明:
關閉指定的httpconnect連結
執行個體:
conn.close()
6、HTTPResponse對象read方法
說明:
獲得http響應的內容部分,即網頁源碼
原型:
body = res.read([amt])
amt: 讀取指定長度的字元,預設為空白,即讀取所有內容
執行個體:
body = res.read()pbody = res.read(10)
返回:
網頁內容字串
7、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
總體執行個體:
#!/usr/bin/env python # -*- coding: utf-8 -*- import httplibimport 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.html