python--httplib模塊使用(轉)


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模塊內的全局的超時時間

[python]   view plain copy
  1. 實例:  
  2. conn1 = HTTPConnection('www.baidu.com:80')  
  3. conn2 = HTTPconnection('www.baidu.com',80)  
  4. conn3 = HTTPConnection('www.baidu.com',80,True,10)  
  5. 錯誤實例:  
  6. 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參數

實例:

[python]   view plain copy
  1. 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頭關鍵字

實例:

[python]   view plain copy
  1. conn.request('GET''/''', {'user-agent':'test'})  


返回:
無返回,其實就是相對於向服務其發送數據,但是沒有最后回車


4、HTTPConnection對象getresponse方法
說明:
獲取一個http響應對象,相當於執行最后的2個回車

原型/實例:

[python]   view plain copy
  1. res = conn.getresponse()  


返回:
HTTPResponse對象


5、HTTPConnection對象close()方法
說明:
關閉指定的httpconnect鏈接

實例:

[python]   view plain copy
  1. conn.close()  



6、HTTPResponse對象read方法
說明:
獲得http響應的內容部分,即網頁源碼

原型:
body = res.read([amt])
amt: 讀取指定長度的字符,默認為空,即讀取所有內容

實例:

[python]   view plain copy
  1. body = res.read()  
  2. 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


總體實例:

[python]   view plain copy
  1. #!/usr/bin/env python    
  2. # -*- coding: utf-8 -*-    
  3. import httplib  
  4. import urllib  
  5.   
  6.    
  7. def sendhttp():  
  8.     data = urllib.urlencode({'@number'12524'@type''issue''@action''show'})     
  9.     headers = {"Content-type""application/x-www-form-urlencoded",  
  10.                "Accept""text/plain"}  
  11.     conn = httplib.HTTPConnection('bugs.python.org')  
  12.     conn.request('POST''/', data, headers)  
  13.     httpres = conn.getresponse()  
  14.     print httpres.status  
  15.     print httpres.reason  
  16.     print httpres.read()  
  17.              
  18.                 
  19. if __name__ == '__main__':    
  20.     sendhttp()   


當然還有其它的一些信息,比如異常類型,比如http的code對應表及查詢字典等等,可以直接參考官網httplib文檔:http://docs.python.org/library/httplib.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM