【轉】python--httplib模塊使用

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

相關文章
相關標籤/搜索