首頁  >  文章  >  後端開發  >  深入理解Python3中的http.client模組

深入理解Python3中的http.client模組

高洛峰
高洛峰原創
2017-03-31 09:42:287197瀏覽

這篇文章主要介紹了關於Python3中http.client模組的相關資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

##Python3 中的http 套件中含有幾個用來開發HTTP 協定的模組。 urllib.request 模組所使用。 ##狀態

管理http.cookiejar 與cookie 相關

    http 模組也定義了一系列的HTTP
  • 狀態碼

    。 client 模組

  • http.client 模組定義了實作http 和https 協定客戶端的類別。 .request 模組來使用他們處理URL 。

  • ##1、http.client.HTTP_PORT
  • http 協定預設的連接埠號,總是80 埠2、http.client.HTTPS_PORT

  • https 協定預設的連接埠號,總是443 埠
  • 3、http.client.responses

  • 將HTTP 1.1 狀態碼對應到
W3C

名字的字典。 ##例如:

>>> from http import HTTPStatus
>>> HTTPStatus.OK<HTTPStatus.OK: 200>
>>> HTTPStatus.OK == 200True
>>> http.HTTPStatus.OK.value200
>>> HTTPStatus.OK.phrase'OK'
>>> HTTPStatus.OK.description'Request fulfilled, document follows'
>>> list(HTTPStatus)[<HTTPStatus.CONTINUE: 100>, <HTTPStatus.SWITCHING_PROTOCOLS: 101>, ...]

基本類別

#HTTPConnection 類別

http.client.responses[http.client.NOT_FOUND] is 'Not Found'
HTTPConnection實例表示與HTTP 伺服器的事務。如果沒有傳遞端口,而主機字串

是以 host:port 的形式,則會提取出端口值,否則將使用預設的 8- 端口。

如果給定了可選參數 timeout ,阻塞操作將會在給定的時間後逾時,若未給定,則使用預設的全域 timeout 設定。

可選參數 source_address 應該以 host 和 port 的元組形式 (host,port),用來作為 HTTP 連線的來源位址。

範例程式碼如下:

http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)
source_address 是在 3.2 版本中新增的。 strict 參數在 3.4 版本中移除了。

HTTPSConnection 類別

>>> h1 = http.client.HTTPConnection('www.python.org')
>>> h2 = http.client.HTTPConnection('www.python.org:80')>>> h3 = http.client.HTTPConnection('www.python.org', 80)
>>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
HTTPSConnection 是 HTTPConnection 的子類,使用 SSL 與安全伺服器聯絡。

預設的連接埠是 443 連接埠。如果指定了 context ,則必須是 ssl.SSLContext 類別的實例來描述不同的 SSL 選項。

key_file 和 cert_file 已經被棄用了,取而代之的是 ssl.SSLContext.load_cert_chain() 。或使用 ssl.create_default_context() 選擇系統信任的 CA 憑證。

check_hostname 參數也被棄用了,使用 context 的 ssl.SSLContext.check_hostname

屬性

HTTPResponse 類別

HTTPSConnection(host, port=None, key_file=None, cert_file=None, [timeout, ]source_address=None, *, context=None, check_hostname=None)
一旦連線成功就會傳回該實例,該類別的物件不能由使用者直接實例化。

HTTPMessage 類別HTTPMessage 實例持有從 HTTP response 傳回的頭部。

異常類別

HTTP

Exception

類別

Exception 類別的子類,也是 http 模組中其他異常類別的基底類別。
其他例外類別:

  • NotConnected

  • #InvalidURL

  • ##UnknownProtocol

  • UnknownTransferEncoding

  • UnimplementedFileMode

  • ##IncompletedRead
  • #ImproperState
  • BadStatusLine
  • LineTooLong
  • CannotSendRequest
  • #CannotSendHeader
  • ResponseNotReady
  • #RemoteDisconnected
  • ##類別方法

HTTPConnection 物件方法

HTTPConnection 實例有如下的方法:

1、HTTPConnection.request(method, url, body=None, headers={})

使用指定的method 方法和url 連結向伺服器發送請求。

如果指定 了body 部分,那麼 body 部分將在 header 部分發送完後發送過去。 body 部分可以是一個字串、位元組物件、檔案物件或是位元組物件的迭代器。不同的 body 類型對應不同的要求。

header 參數應該是 HTTP 頭部的映射,是字典類型。

如果 header 中不包含 Content-Length 項,那麼就會根據 body 的差異來自動加入上去。

2、HTTPConnection.getresponse()

必須在請求傳送後才能呼叫得到伺服器回傳的內容,回傳的是一個 HTTPResponse 實例。

3、HTTPConnection.set_debuglevel(level)

設定

偵錯

級別,預設偵錯級別是 0 ,表示沒有偵錯輸出。

4、HTTPConnection.set_tunnel(host, port=None, headers=None)

設定 HTTP 隧道連結的主機和端口,這允許連接使用代理伺服器。

5、HTTPConnection.connect()

連接指定的伺服器。預設情況下,如果客戶端沒有連接,則會在 request 請求時自動呼叫方法。

6、HTTPConnection.close()

關閉連結。

7、HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)

當和伺服器的連結成功後,應先呼叫該方法。

傳送到伺服器的內容包括:request 字串、selector 字串和 HTTP 協定版本。

8、HTTPConnection.putheader(header, argument[, …])

傳送 HTTP 頭部到伺服器。

傳送到伺服器的內容包括:header 頭部、冒號、空格和參數清單裡的第一個。

9、HTTPConnection.endheaders(message_body=None)

發送一個空白行到伺服器,標識頭部的結束。

10、HTTPConnection.send(data)

發送資料到伺服器。

應該在 endheaders() 方法之後和在 getresponse() 方法之前呼叫。

HTTPResponse 物件方法

HTTPResponse 實例包含了從伺服器傳回的 HTTP 回應。

它提供了存取請求頭部和 body 部分的方法。

HTTPResponse 是一個可迭代的物件而且可以使用 with 語句來宣告。

HTTPResponse 實例有以下的方法 :

1、HTTPResponse.read([amt])

讀取和傳回 response 的 body 部分。

2、HTTPResponse.readinto(b)

讀取指定的位元組長度 len(b),並返回緩衝位元組 b 。

函數

傳回讀取的位元組數

3、HTTPResponse.getheader(name,default=None)

返回指定名称 name 的 HTTP 头部值,如果没有相应匹配的 name 值,则返回默认的 None。如果有多个相匹配的,则返回所有的值,以逗号分隔。

4、HTTPResponse.getheaders()

以元组的形式返回所有的头部信息 (header,value)。

5、HTTPResponse.fileno()

6、HTTPResponse.msg

7、HTTPResponse.version。

HTTP 协议版本

8、HTTPResponse.status

HTTP 状态码

9、HTTPResponse.reason

10、HTTPResponse.debuglevel

11、HTTPResponse.closed

如果为 True ,说明连接已关闭。

示例

import http.client
import urllib,parser
# # 初始化一个 https 链接
conn = http.client.HTTPSConnection("www.python.org")
# 指定 request 请求的方法和请求的链接地址
conn.request("GET","/doc/")
# 得到返回的 http response
r1 = conn.getresponse()
# HTTP 状态码
print(r1.status,r1.reason)
# HTTP 头部
print(r1.getheaders())
# body 部分
print(r1.read())
# 如果连接没有关闭,打印输出前 200 个字节
if not r1.closed:
 print(r1.read(200))
# 关闭连接后才能重新请求
conn.close()
# 请求一个不存在的文件或地址
conn.request("GET","/parrot.spam")
r2 = conn.getresponse()
print(r2.status,r2.reason)
conn.close()
# 使用 HEAD 请求,但是不会返回任何数据
conn = http.client.HTTPSConnection("www.python.org")
conn.request("HEAD","/")
res = conn.getresponse()
print(res.status,res.reason)
data = res.read()
print(len(data))
conn.close()
# 使用 POST 请求,提交的数据放在 body 部分
params = urllib.parse.urlencode({'@number':12524,'@type':'issue','@action':'show'})
# post 请求数据,要带上 Content-type 字段,以告知消息主体以何种方式编码
headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}
conn = http.client.HTTPConnection("bugs.python.org")
conn.request("POST","/",params,headers)
response = conn.getresponse()
# 访问被重定向
print(response.status,response.reason)
print(response.read().decode("utf-8"))
conn.close()

以上是深入理解Python3中的http.client模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn