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 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.html