日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

http 错误 404.0 - not found_python3从零学习-5.10.8、http.client—HTTP 协议客户端

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 协议客户端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。