python之web模塊學習-- httplib


1  httplib簡介html

httplib 是python中http協議的客戶端實現,可使用該模塊來與 HTTP 服務器進行交互python

    httplib是一個相對底層的http請求模塊,其上有專門的包裝模塊,如urllib內建模塊,goto等第三方模塊,可是封裝的越高就越不靈活,好比urllib模塊裏請求錯誤時就不會返回結果頁的內容,只有頭信息,對於某些須要檢測錯誤請求返回值的場景就不適用,因此就得用這個模塊了。web

    httplib實現了HTTP和HTTPS的客戶端協議,通常不直接使用,在python更高層的封裝模塊中(urllib,urllib2)使用了它的HTTP和HTTPS實現。其中HTTPS須要socket編譯了SSL支持。HTTP類僅僅是和python1.5.2及之前的版本兼容,不推薦使用。chrome

    2 httplib 詳解安全

下面介紹一下 httplib經常使用的類服務器

    2.1 class httplib.HTTPConnectioncookie

       HTTPConnection類 有兩種常見方式:dom

     1 HTTPConnectionsocket

    class httplib.HTTPConnection(host[,port[, strict[, timeout[, source_address]]]]) 
用法:
    該類用於建立一個http類型的請求連接
參數:
    host: 請求的服務器host,不能帶http://開頭
    port: 服務器web服務端口
    strict: 是否嚴格檢查請求的狀態行,就是http1.0/1.1 協議版本的那一行,即請求的第一行,默認爲False,爲True時檢查錯誤會拋異常
    timeout: 單次請求的超時時間,沒有時默認使用httplib模塊內的全局的超時時間
返回:
    HTTPConnection類會實例並返回一個HTTPConnection對象
詳解:
    HttpConnection的實例表示與HTTP服務器的事務。實例化時須要傳遞主機和可選的端口號。若是沒有端口號,試圖以host:port格式從主機字符串提取,若是提取失敗則使用默認的HTTP端口(80)。參數strict默認爲false,表示在沒法解析狀態行時(status line)不能被HTTP/1.0或1.1解析時不拋出BadStatusLine異常;可選參數timeout表示即阻塞在多少秒後超時,若是沒有給出默認使用全局超時設置。可選參數source_address表示HTTP的源地址(host, port)。

    2 HTTPSConnectionide

    class httplib.HTTPSConnection(host[, port[, key_file[,cert_file[, strict[, timeout[, source_address]]]]]])
用法:
    該類用於建立一個https類型的請求連接
參數:
    key_file:一個包含PEM格式的私鑰文件
    cert_file:一個包含PEM格式的認證文件
    other:其它同http參數
返回:
    一樣返回一個HTTPSConnection對象
注意:
    要建立https連接,必需要保證底層的socket模塊是支持ssl的編譯模式,即編譯時ssl選項的開關是開着的
詳解:
   HttpConnection的子類,使用SSL與安全服務器通訊。默認端口爲443。key_file是包含PEM格式私鑰的文件名稱。 cert_file中是PEM格式的證書鏈文件。

附代碼:

HTTP:

>>> import httplib
>>> conn =httplib.HTTPConnection('www.baidu.com')
>>> conn = httplib.HTTPConnection('www.baidu.com:80')
>>> conn =httplib.HTTPConnection('www.baidu.com','80')
>>> conn =httplib.HTTPConnection('www.baidu.com','80',True)
>>> conn =httplib.HTTPConnection('www.baidu.com','80',True,10)

    錯誤示例:

>>> conn =httplib.HTTPConnection('www.baidu.com:80',True,10)

HTTPS

>>> conn = httplib.HTTPSConnection('www.baidu.com',443,key_file,cert_file,True,10)

    

    如下爲 關於 HTTPConnection 類的方法

    2.1.1  HTTPConnection.request()

    HTTPConnection.request( method , url [ , body [ , headers ]] )
用法:
    調用request方法會向服務器發送一次請求
參數:
    method: 請求的方式,如'GET','POST','HEAD','PUT','DELETE'等
    url: 請求的網頁路徑。如:'/index.html'
    body: 請求是否帶數據,該參數是一個字典
    headers: 請求是否帶頭信息,該參數是一個字典,不過鍵的名字是指定的http頭關鍵字
返回:
    無返回,其實就是相對於向服務其發送數據,可是沒有最後回車

附代碼:

>>> import httplib
>>>conn=httplib.HTTPConnection('www.baidu.com',80,False,10)
>>> conn.request('get','/','',{'user-agent':'test'})

    2.1.2  HTTPConnection.getresponse()

說明:
    獲取一個http響應對象,至關於執行最後的2個回車
返回:
    HTTPResponse對象(下面會用到)

附代碼:

>>> import httplib
>>> conn=httplib.HTTPConnection('www.baidu.com',80,False,10)
>>> conn.request('get','/','',{'user-agent':'test'})
>>>res = conn.getresponse()

    2.1.3  HTTPConnection.connect()

    對象建立以後鏈接到指定的服務器

    2.1.4  HTTPConnection.close()

    關閉與服務器的鏈接    

    附代碼:

>>> import httplib
>>> conn=httplib.HTTPConnection('www.baidu.com',80,False,10)
>>> conn.request('get','/','',{'user-agent':'test'})
>>> res = conn.getresponse()
>>>conn.close()

    2.1.5  HTTPConnection.set_debuglevel( level )

    設置高度的級別。參數level 的默認值爲0 ,表示不輸出任何調試信息


  2.2  class httplib.HTTPResponse

    HTTPResponse表示服務器對客戶端請求的響應。每每經過調用HTTPConnection.getresponse()來建立,實例鏈接成功以後返回的類,不能由用戶實例化。

    它有以下方法和屬性:

    2.2.1  HTTPResponse.read([amt])

說明:
    得到http響應的內容部分,即網頁源碼
原型:
    body = res.read([amt])amt: 讀取指定長度的字符,默認爲空,即讀取全部內容
返回:
    網頁內容字符串

    獲取響應的消息體。若是請求的是一個普通的網頁,那麼該方法返回的是頁面的html。可選參數amt表示從響應流中讀取指定字節的數據。

    附代碼:

>>>conn=httplib.HTTPConnection('www.baidu.com',80,False,10)
>>> conn.request('GET','')
>>> res = conn.getresponse()
>>>res.read()
#下面的爲網頁信息
'<!DOCTYPE html><!--STATUSOK-->\r\n<html>\r\n<head>\r\n\t<metahttp-equiv="content-type"content="text/html;charset=utf-8">\r\n\t<metahttp-equiv="X-UA-Compatible" content="IE=Edge">\r\n\t<linkrel="dns-prefetch"href="//s1.bdstatic.com"/>\r\n\t<linkrel="dns-prefetch" href="//t1.baidu.com"/>\r\n\t<linkrel="dns-prefetch" href="//t2.baidu.com"

    2.2.2   HTTPResponse.getheader(name[, default])

    獲取執指定的響應頭。Name表示頭域(headerfield)名,可選參數default在頭域名不存在的狀況下做爲默認值返回。

    2.2.3   HTTPResponse.getheaders()

    得到全部的響應頭內容,是一個元組列表[(name,value),(name2,value2)]


    附代碼:

>>>res.getheaders()
[('content-length', '14613'), ('bdqid','0x9d3801010001675e'), ('set-cookie','BAIDUID=9ACDF7C2DF8C2EA720CBD97636829343:FG=1; expires=Thu, 31-Dec-37 23:55:55GMT; max-age=2147483647; path=/; domain=.baidu.com,BIDUPSID=9ACDF7C2DF8C2EA720CBD97636829343; expires=Thu, 31-Dec-37 23:55:55 GMT;max-age=2147483647; path=/; domain=.baidu.com, PSTM=1436858070; expires=Thu,31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com,BDSVRTM=0; path=/'), ('accept-ranges', 'bytes'), ('vary', 'Accept-Encoding'),('bduserid', '0'), ('server', 'BWS/1.1'), ('last-modified', 'Wed, 03 Sep 201402:48:32 GMT'), ('connection', 'Keep-Alive'), ('x-ua-compatible', 'IE=Edge,chrome=1'),('pragma', 'no-cache'), ('cache-control', 'no-cache'), ('date', 'Tue, 14 Jul2015 07:14:30 GMT'), ('p3p', 'CP=" OTI DSP COR IVA OUR IND COM "'),('content-type', 'text/html'), ('bdpagetype', '1')]

    2.2.4  HTTPResponse.msg

    獲取全部的響應頭信息。包含響應頭的mimetools.Message實例

>>>res.msg
<httplib.HTTPMessage instance at0x1959e60>

    2.2.5  HTTPResponse.msg

    獲取服務器所使用的http協議版本。11表示http/1.1;10表示http/1.0

>>> res.version
11

     2.2.6  HTTPResponse.status

    獲取響應的狀態碼。如:200表示請求成功

>>> res.status
200

     2.2.6  HTTPResponse.reason

    返回服務器處理請求的結果說明。通常爲」OK」

>>> res.reason
'OK'

  2.3  class httplib.HTTPMessage

    HTTPMessage實例用於保存HTTP響應頭。它使用mimetools.Message類實現,並提供了處理HTTP頭的工具函數。它不直接實例化的用戶。不能由用戶實例化。

  2.4  異常

    exception httplib.HTTPException

Exception的子類,此模塊中的其餘異常的基類。下面的類默認是該類的直接子類。

  • httplib.NotConnected

  • httplib.InvalidURL

  • httplib.UnknownProtocol

  • httplib.UnknownTransferEncoding

  • httplib.UnimplementedFileMode

  • httplib.IncompleteRead

  • httplib.ImproperConnectionState

  • httplib.CannotSendRequest

ImproperConnectionState的一個子類。

  • httplib.CannotSendHeader

ImproperConnectionState的一個子類。

  • httplib.ResponseNotReady

ImproperConnectionState的一個子類。

  • httplib.BadStatusLine

服務器返回的HTTP狀態碼不認識時產生。

  2.5  常量和類變量

  • httplib.HTTP_PORT:HTTP協議的默認端口,恆爲80。

  • httplib.HTTPS_PORT:HTTPS協議的默認端口,恆爲443。

  • 狀態常量:參見http://docs.python.org/2/library/httplib.html

  • httplib.responses:映射HTTP1.1狀態代碼映射到W3C的名字的字典。

相關文章
相關標籤/搜索