国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:16:50
字體:
來源:轉載
供稿:網友

http 模塊簡介

Python3 中的 http 包中含有幾個用來開發 HTTP 協議的模塊。

  • http.client 是一個底層的 HTTP 協議客戶端,被更高層的 urllib.request 模塊所使用。
  • http.server 包含基于 socketserver 的基本 HTTP 服務器的類。
  • http.cookies 實現 cookie 狀態管理
  • http.cookiejar 與 cookie 相關

http 模塊還定義了一系列的 HTTP 狀態碼。

HTTPStatus 類是在 Python 3.5 版本中新增的。

>>> 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>, ...]

具體的 HTTP 狀態碼和相應的說明可以在 Python 的官方文檔上找到: https://docs.python.org/3/library/http.html

http.client 模塊

http.client 模塊定義了實現 http 和 https 協議客戶端的類。

該模塊通常不會直接使用,而是用封裝好的 urllib.request 模塊來使用他們處理 URL 。

常量

http 模塊中的常量:

1、http.client.HTTP_PORT

http 協議默認的端口號,總是 80 端口

2、http.client.HTTPS_PORT

https 協議默認的端口號,總是 443 端口

3、http.client.responses

將 HTTP 1.1 狀態碼映射到 W3C 名字的字典。

例如:

http.client.responses[http.client.NOT_FOUND] is 'Not Found'

基本類

HTTPConnection 類

http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)

HTTPConnection 實例表示與 HTTP 服務器的事務。

實例化 HTTPConnection 時應該傳遞一個主機和可選的端口號。如果沒有傳遞端口,而主機字符串是以 host:port 的形式,則會提取出端口值,否則將使用默認的 8- 端口。

如果給定了可選參數 timeout ,阻塞操作將會在給定的時間后超時,若未給定,則使用默認的全局 timeout 設置。

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

示例代碼如下:

>>> 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)

source_address 是在 3.2 版本中添加的。

strict 參數在 3.4 版本中移除了。

HTTPSConnection 類

HTTPSConnection(host, port=None, key_file=None, cert_file=None, [timeout, ]source_address=None, *, context=None, check_hostname=None)

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 類

class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)

一旦連接成功就會返回該實例,該類的對象不能由用戶直接實例化。

HTTPMessage 類

HTTPMessage 實例持有從 HTTP response 返回的頭部。

異常類

HTTPException 類

Exception 類的子類,也是 http 模塊中其他異常類的基類。
其他異常類:

  • NotConnected
  • InvalidURL
  • UnknownProtocol
  • UnknownTransferEncoding
  • UnimplementedFileMode
  • IncompletedRead
  • ImproperConnectionState
  • 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.clientimport urllib,parser# # 初始化一個 https 鏈接conn = http.client.HTTPSConnection("www.python.org")# 指定 request 請求的方法和請求的鏈接地址conn.request("GET","/doc/")# 得到返回的 http responser1 = 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()

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大安市| 全南县| 潢川县| 兴文县| 深泽县| 成都市| 鱼台县| 保定市| 武清区| 吉木萨尔县| 定州市| 莱芜市| 黎川县| 淮北市| 睢宁县| 乐陵市| 龙井市| 金塔县| 革吉县| 滦南县| 禹州市| 天祝| 中牟县| 清水河县| 聂拉木县| 伊宁市| 枣强县| 武义县| 双桥区| 高淳县| 颍上县| 德钦县| 合江县| 乌拉特中旗| 绥宁县| 遂昌县| 特克斯县| 宕昌县| 陵水| 静乐县| 湖州市|