python httplib 模組

風的王子發表於2015-03-16
httplib 是 python中http 協議的客戶端實現,可以使用該模組來與 HTTP 伺服器進行互動。httplib的內容不是很多,也比較簡單。以下是一個非常簡單的例子,使用httplib獲取google首頁的html:
[python] view plaincopy

    #coding=gbk  
    import httplib  
    conn = httplib.HTTPConnection("www.google.cn")  
    conn.request('get', '/')  
    print conn.getresponse().read()  
    conn.close()  


下面詳細介紹httplib提供的常用型別和方法。
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 在下面會講解。
HTTPConnection.connect ()

  連線到Http 伺服器。
HTTPConnection.close ()

  關閉與伺服器的連線。
HTTPConnection.set_debuglevel ( level )

  設定高度的級別。引數level 的預設值為0 ,表示不輸出任何除錯資訊。
httplib.HTTPResponse

  HTTPResponse表示伺服器對客戶端請求的響應。往往通過呼叫HTTPConnection.getresponse()來建立,它有如下方法和屬性:
HTTPResponse.read([amt])

  獲取響應的訊息體。如果請求的是一個普通的網頁,那麼該方法返回的是頁面的html。可選引數amt表示從響應流中讀取指定位元組的資料。
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”

下面通過一個例子來熟悉HTTPResponse中的方法:
[python] view plaincopy

    #coding=gbk  
    import httplib  
    conn = httplib.HTTPConnection("www.g.cn", 80, False)  
    conn.request('get', '/', headers = {"Host": "www.google.cn",  
                                        "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",  
                                        "Accept": "text/plain"})  
    res = conn.getresponse()  
    print 'version:', res.version  
    print 'reason:', res.reason  
    print 'status:', res.status  
    print 'msg:', res.msg  
    print 'headers:', res.getheaders()  
    #html  
    #print '/n' + '-' * 50 + '/n'  
    #print res.read()  
    conn.close()  

這是我用firebug跟蹤到響應頭:

 

Httplib模組中還定義了許多常量,如:
Httplib. HTTP_PORT的值為80,表示預設的埠號為80;
Httplib.OK的值為200,表示請求成功返回;
Httplib. NOT_FOUND的值為404,表示請求的資源不存在;
可以通過httplib.responses查詢相關變數的含義,如:
Print httplib.responses[httplib.NOT_FOUND]    #not found,

相關文章