python–httplib模組使用

來源:互聯網
上載者:User

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模組內的全域的逾時時間

執行個體: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對象

2、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選項的開關是開著的

3、HTTPConnection對象request方法:
說明:
發送一個請求

原型:
conn.request(method, url[, body[, headers]])
method: 請求的方式,如'GET','POST','HEAD','PUT','DELETE'等
url: 請求的網頁路徑。如:'/index.html'
body: 請求是否帶資料,該參數是一個字典
headers: 請求是否帶頭資訊,該參數是一個字典,不過鍵的名字是指定的http頭關鍵字

執行個體:

conn.request('GET', '/', '', {'user-agent':'test'})

返回:
無返回,其實就是相對於向服務其發送資料,但是沒有最後斷行符號

4、HTTPConnection對象getresponse方法
說明:
擷取一個http響應對象,相當於執行最後的2個斷行符號

原型/執行個體:

res = conn.getresponse()

返回:
HTTPResponse對象

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

執行個體:

conn.close()

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

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

執行個體:

body = res.read()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

總體執行個體:

#!/usr/bin/env python  # -*- coding: utf-8 -*-  import httplibimport 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.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.