Python模塊學習 ---- httplib HTTP協議客戶端實現

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

下面詳細介紹httplib提供的經常使用類型和方法。python

httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )

  HTTPConnection類的構造函數,表示一次與服務器之間的交互,即請求/響應。參數host表示服務器主機, 如:www.csdn.net;port爲端口號,默認值爲80; 參數strict的 默認值爲false, 表示在沒法解析服務器返回的狀態行時( status line) (比較典型的狀態行如: HTTP/1.0 200 OK ),是否拋BadStatusLine 異常;可選參數timeout 表示超時時間。
  HTTPConnection提供的方法:服務器

HTTPConnection.request ( method , url [ , body [ , headers ]] )

  調用request 方法會向服務器發送一次請求,method 表示請求的方法,經常使用有方法有get 和post ;url 表示請求的資源的url ;body 表示提交到服務器的數據,必須是字符串(若是method 是"post" ,則能夠把body 理解爲html 表單中的數據);headers 表示請求的http 頭。函數

HTTPConnection.getresponse ()

  獲取Http 響應。返回的對象是HTTPResponse 的實例,關於HTTPResponse 在下 面 會講解。post

HTTPConnection.connect ()

  鏈接到Http 服務器。url

HTTPConnection.close ()

  關閉與服務器的鏈接。.net

HTTPConnection.set_debuglevel ( level )

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

httplib.HTTPResponse

  HTTPResponse表示服務器對客戶端請求的響應。每每經過調用HTTPConnection.getresponse()來建立,它有 以下方法和屬性:調試

HTTPResponse.read([amt])

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

HTTPResponse.getheader(name[, default])

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

HTTPResponse.getheaders()

  以列表的形式返回全部的頭信息。

HTTPResponse.msg

  獲取全部的響應頭信息。

HTTPResponse.version

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

HTTPResponse.status

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

HTTPResponse.reason

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

 

  1. 導入httplib包
    import httplib
     
  2. 鏈接服務器
    conn = httplib.HTTPConnection('www.sandzhang.com')
     
  3. 發送HTTP協議GET請求
    conn.request('GET', '/')
     
  4. 獲取結果(結果類型爲httplib.HTTPResponse)
    result = conn.getresponse()
     
  5. 獲取HTTP請求結果值,200爲成功,具體其餘值含義請查看HTTP協議內容
    resultStatus = result.status
     
  6. 獲取請求到的結果內容
    resultContent = result.read()
     
  7. 關閉鏈接
    conn.close()

若是要模擬客戶端進行請求,還能夠在發送請求的時候攜帶頭數據(HTTP header)

headers = {"Content-Type":"text/html; charset=gb2312"}
conn.request('POST', '/', headers=headers)

除了頭數據,還能夠在POST的時候帶請求參數

params = urllib.urlencode({'pname':'pvalue'}); conn.request('POST', '/', body=params)

相關文章
相關標籤/搜索