首頁 後端開發 Python教學 深入理解Python3中的http.client模組

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

Mar 31, 2017 am 09:42 AM

這篇文章主要介紹了關於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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles