http 错误 404.0 - not found_python3从零学习-5.10.8、http.client—HTTP 协议客户端
源代碼: Lib/http/client.py
這個模塊定義了實現 HTTP 和 HTTPS 協議客戶端的類。 它通常不直接使用 — 模塊 urllib.request 用它來處理使用 HTTP 和 HTTPS 的 URL。
注解 : HTTPS 支持僅在編譯 Python 時啟用了 SSL 支持的情況下(通過 ssl 模塊)可用。
該模塊支持以下類:
class http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None)
HTTPConnection實例表示一個使用HTTP服務器的事務。應該實例化它,向它傳遞主機和可選端口號。如果沒有傳遞端口號,則從主機字符串中提取端口(如果它具有form host:port),否則使用缺省HTTP端口(80)。如果給定了可選的超時參數,那么阻塞操作(如連接嘗試)將在那么多秒后超時(如果沒有給定,則使用全局默認超時設置)。可選的source_address參數可以是用作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)在 3.2 版更改: 添加了*source_address* 參數
在 3.4 版更改: 刪除了 strict 參數,不再支持 HTTP 0.9 風格的“簡單響應”。
class http.client.HTTPSConnection(host, port=None, key_file=None, cert_file=None, [timeout, ]source_address=None, *, context=None, check_hostname=None)
HTTPConnection 的子類,使用 SSL 與安全服務器進行通信。 默認端口為 443。 如果指定了 context,它必須為一個描述 SSL 各選項的 ssl.SSLContext 實例。
在 3.2 版更改: 添加了 source_address, context 和 check_hostname。
在 3.2 版更改: 這個類目前會在可能的情況下(即如果 ssl.HAS_SNI 為真值)支持 HTTPS 虛擬主機。
在 3.4 版更改: 刪除了 strict 參數,不再支持 HTTP 0.9 風格的“簡單響應”。
在 3.4.3 版更改: 目前這個類在默認情況下會執行所有必要的證書和主機檢查。 要回復到先前的非驗證行為,可以將 ssl._create_unverified_context() 傳遞給 context 參數。
3.6 版后已移除: key_file 和 cert_file 已棄用并轉而推薦 context。 請改用 ssl.SSLContext.load_cert_chain() 或讓 ssl.create_default_context() 為你選擇系統所信任的 CA 證書。
check_hostname 參數也已棄用;應當改用 context 的 ssl.SSLContext.check_hostname 屬性。
class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)
在成功連接后返回類的實例,而不是由用戶直接實例化。
在 3.4 版更改: 刪除了 strict 參數,不再支持HTTP 0.9 風格的“簡單響應”。
下列異常可以適當地被引發:
- exception http.client.HTTPException
此模塊中其他異常的基類。 它是 Exception 的一個子類。
- exception http.client.NotConnected
HTTPException 的一個子類。
- exception http.client.InvalidURL
HTTPException 的一個子類,如果給出了一個非數字或為空值的端口就會被引發。
- exception http.client.UnknownProtocol
HTTPException 的一個子類。
- exception http.client.UnknownTransferEncoding
HTTPException 的一個子類。
- exception http.client.UnimplementedFileMode
HTTPException 的一個子類。
- exception http.client.IncompleteRead
HTTPException 的一個子類。
- exception http.client.ImproperConnectionState
HTTPException 的一個子類。
- exception http.client.CannotSendRequest
ImproperConnectionState 的一個子類。
- exception http.client.CannotSendHeader
ImproperConnectionState 的一個子類。
- exception http.client.ResponseNotReady
ImproperConnectionState 的一個子類。
- exception http.client.BadStatusLine
HTTPException 的一個子類。 如果服務器反饋了一個我們不理解的 HTTP 狀態碼就會被引發。
- exception http.client.LineTooLong
HTTPException 的一個子類。 如果在 HTTP 協議中從服務器接收到過長的行就會被引發。
- exception http.client.RemoteDisconnected
ConnectionResetError 和 BadStatusLine 的一個子類。 當嘗試讀取響應時的結果是未從連接讀取到數據時由 HTTPConnection.getresponse() 引發,表明遠端已關閉連接。
此模塊中定義的常量為:
- http.client.HTTP_PORT
HTTP 協議默認的端口號 (總是 80)。
- http.client.HTTPS_PORT
HTTPS 協議默認的端口號 (總是 443)。
- http.client.responses
這個字典把 HTTP 1.1 狀態碼映射到 W3C 名稱。
例如:http.client.responses[http.client.NOT_FOUND] 是 'NOT FOUND (未發現)。
HTTPConnection 對象
HTTPConnection 實例擁有以下方法:
HTTPConnection.request(method, url, body=None, headers={}, *, encode_chunked=False)
這會使用 HTTP 請求方法 method 和選擇器 url 向服務器發送請求。
如果給定 body,那么給定的數據會在信息頭完成之后發送。它可能是一個 str 、一個 bytes-like object 、一個打開的 file object,或者 bytes 迭代器。如果 body 是字符串,它會按 HTTP 默認的 ISO-8859-1 編碼;如果是一個字節類對象,它會按原樣發送;如果是 file object ,文件的內容會被發送,這個文件對象應該支持 read() 方法。如果這個文件對象是一個 io.TextIOBase 實例, read() 方法返回的數據會按 ISO-8859-1 編碼,否則 read() 方法返回的數據會按原樣發送;如果 body 是一個迭代器,迭代器中的元素會被發送,直到迭代器耗盡。
headers 參數應是額外的隨請求發送的 HTTP 信息頭的字典。
如果 headers 既不包含 Content-Length 也沒有 Transfer-Encoding,但存在請求正文,那么這些頭字段中的一個會自動設定。如果 body 是 None,那么對于要求正文的方法 (PUT,POST,和 PATCH),Content-Length 頭會被設為 0。如果 body 是字符串或者類似字節的對象,并且也不是 文件,Content-Length 頭會設為正文的長度。任何其他類型的 body (一般是文件或迭代器)會按塊編碼,這時會自動設定 Transfer-Encoding 頭以代替 Content-Length。
在 headers 中指定 Transfer-Encoding 時, encode_chunked 是唯一相關的參數。如果 encode_chunked 為 False,HTTPConnection 對象會假定所有的編碼都由調用代碼處理。如果為 True,正文會按塊編碼。
注解 HTTP 協議在 1.1 版中添加了塊傳輸編碼。除非明確知道 HTTP 服務器可以處理 HTTP 1.1,調用者要么必須指定 Content-Length,要么必須傳入 str 或字節類對象,注意該對象不能是表達 body 的文件。
3.2 新版功能: body 現在可以是可迭代對象了。
在 3.6 版更改: 如果 Content-Length 和 Transfer-Encoding 都沒有在 headers 中設置,文件和可迭代的 body 對象現在會按塊編碼。添加了 encode_chunked 參數。不會嘗試去確定文件對象的 Content-Length。
HTTPConnection.getresponse()
應當在發送一個請求從服務器獲取響應時被調用。 返回一個 HTTPResponse 的實例。
注解 請注意你必須在讀取了整個響應之后才能向服務器發送新的請求。
在 3.5 版更改: 如果引發了 ConnectionError 或其子類, HTTPConnection 對象將在發送新的請求時準備好重新連接。
HTTPConnection.set_debuglevel(level)
設置調試等級。 默認的調試等級為 0,意味著不會打印調試輸出。 任何大于 0 的值將使得所有當前定義的調試輸出被打印到 stdout。 debuglevel 會被傳給任何新創建的 HTTPResponse 對象。
HTTPConnection.set_tunnel(host, port=None, headers=None)
為 HTTP 連接隧道設置主機和端口。 這將允許通過代理服務器運行連接。
host 和 port 參數指明隧道連接的位置(即 CONNECT 請求所包含的地址,而 不是 代理服務器的地址)。
headers 參數應為一個隨 CONNECT 請求發送的額外 HTTP 標頭的映射。
例如,要通過一個運行于本機 8080 端口的 HTTPS 代理服務器隧道,我們應當向 HTTPSConnection 構造器傳入代理的地址,并將我們最終想要訪問的主機地址傳給 set_tunnel() 方法:
>>>>>> import http.client>>> conn = http.client.HTTPSConnection("localhost", 8080)>>> conn.set_tunnel("www.python.org")>>> conn.request("HEAD","/index.html")HTTPConnection.connect()
當對象被創建后連接到指定的服務器。 默認情況下,如果客戶端還未建立連接,此函數會在發送請求時自動被調用。
HTTPConnection.close()
關閉到服務器的連接。
作為對使用上述 request() 方法的替代同,你也可以通過使用下面的四個函數,分步驟發送請的請求。
HTTPConnection.putrequest(method, url, skip_host=False, skip_accept_encoding=False)
這應該是連接到服務器后的第一次調用。它向服務器發送一行代碼,包括方法字符串、url字符串和HTTP版本(HTTP/1.1)。要禁用Host:或accept - encoding:頭的自動發送(例如接受額外的內容編碼),請使用非假值指定skip_host或skip_accept_encoding。
HTTPConnection.putheader(header, argument[, ...])
發送一個RFC 822樣式的頭到服務器。它向服務器發送一行代碼,包括標題、冒號、空格和第一個參數。如果給出更多的參數,則發送延續行,每一行由一個制表符和一個參數組成。
HTTPConnection.endheaders(message_body=None, *, encode_chunked=False)
向服務器發送一個空行,表示標頭的結束。可選的message_body參數可用于傳遞與請求關聯的消息體。
如果encode_chunked為真,則message_body的每次迭代的結果將按照RFC 7230第3.3.1節的規定進行塊編碼。數據的編碼方式取決于message_body的類型。如果message_body實現了緩沖區接口,那么編碼將產生單個塊。如果message_body是一個集合。可迭代的,message_body的每次迭代都會產生一個塊。如果message_body是一個文件對象,那么每次對.read()的調用都會產生一個塊。該方法會立即在message_body之后自動發出塊編碼數據的結束信號。
HTTPConnection.send(data)
發送數據到服務器。這應該只在調用endheaders()方法之后和getresponse()調用之前直接使用。
HTTPResponse 對象
HTTPResponse實例包裝來自服務器的HTTP響應。它提供對請求頭和實體主體的訪問。響應是一個可迭代對象,可以在with語句中使用。
在3.5版更改:io。BufferedIOBase接口現在已經實現,并且支持它的所有讀取器操作。
HTTPResponse.read([amt])
讀取并返回響應體,或者一直到下一個amt字節。
HTTPResponse.readinto(b)
將響應體的下一個len(b)字節讀入緩沖區b。返回讀取的字節數。
HTTPResponse.getheader(name, default=None)
返回標題名稱的值,如果沒有標題匹配名稱,則返回默認值。如果名稱名為name的頭部超過一個,則返回由','連接的所有值。如果‘default’是除單個字符串之外的任何可迭代的字符串,其元素也會以逗號連接返回。
HTTPResponse.getheaders()
返回元組(頭、值)列表。
HTTPResponse.fileno()
返回基礎套接字的文件名。
HTTPResponse.msg
http.client。包含響應頭的HTTPMessage實例。http.client。HTTPMessage是email.message.Message的子類。
HTTPResponse.version
服務器使用的HTTP協議版本。10表示HTTP/1.0, 11表示HTTP/1.1。
HTTPResponse.status
由服務器返回的狀態碼。
HTTPResponse.reason
由服務器返回的原因短語。
HTTPResponse.debuglevel
調試鉤子。如果debuglevel大于0,則在讀取和解析響應時,消息將被打印到stdout。
HTTPResponse.closed
如果流關閉,則為真。
例子
下面是一個使用GET方法的示例會話:
>>> import http.client>>> conn = http.client.HTTPSConnection("www.python.org")>>> conn.request("GET", "/")>>> r1 = conn.getresponse()>>> print(r1.status, r1.reason)200 OK>>> data1 = r1.read()??# This will return entire content.>>> # The following example demonstrates reading data in chunks.>>> conn.request("GET", "/")>>> r1 = conn.getresponse()>>> while not r1.closed:...?????print(r1.read(200))??# 200 bytesb'
總結
以上是生活随笔為你收集整理的http 错误 404.0 - not found_python3从零学习-5.10.8、http.client—HTTP 协议客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “池边好时节”上一句是什么
- 下一篇: 治输卵管堵塞要多少钱