この記事では、主に Python3 の http.client モジュールに関する関連情報を紹介します。詳細については、必要な友人が参照してください。
http モジュールの紹介
Python3 の http パッケージには、低レベルの HTTP プロトコルです。上位レベルの urllib.request モジュールによって使用される
http.server には、socketserver に基づく基本的な HTTP サーバー クラスが含まれています。
http モジュールは、一連の HTTP
ステータス コードhttp プロトコルのデフォルトのポート番号、常にポート 80 2、http.client.HTTPS_PORT
https プロトコルのデフォルトのポート番号、常にポート 4433、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>, ...]
Basic クラス
http.client.responses[http.client.NOT_FOUND] is 'Not Found'
HTTPConnection インスタンスは HTTP とのトランザクションを表します。サーバー HTTPConnection をインスタンス化するときに、ホストとオプションのポート番号を渡す必要があります。ポートが渡されず、ホスト string が host:port の場合は、ポート値が抽出されます。それ以外の場合は、デフォルトの 8 ポートが使用されます。オプションのパラメータ timeout が指定されている場合、ブロッキング操作は指定された時間が経過するとタイムアウトになります。そうでない場合は、デフォルトのグローバル タイムアウト設定が使用されます。
オプションのパラメータ source_address は、ホストとポートのタプルの形式である必要があります。 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 は、SSL を使用して安全なサーバーに接続する HTTPConnection のサブクラスです。
デフォルトのポートはポート 443 です。 context を指定する場合、さまざまな SSL オプションを記述するための ssl.SSLContext クラスのインスタンスである必要があります。 key_file と cert_file は非推奨となり、ssl.SSLContext.load_cert_chain() に置き換えられました。または、 ssl.create_default_context() を使用して、システムが信頼する CA 証明書を選択します。
check_hostname パラメーターも非推奨になりました。コンテキストの 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 応答から返されたヘッダーを保持します。
例外クラスHTTP
Exceptionクラス
Exception クラスのサブクラスであり、http モジュール内の他の例外クラスの基本クラスでもあります。
その他の例外クラス:
NotConnected
InvalidURL
UnknownProtocol
UnknownTransferEncoding
UnimplementedFileMode
未完了読み取り
不適切な接続状態
BadStatusLine
LineTooLong
CannotSendRequest
CannotSendHeader
ResponseNotReady
RemoteDisconnected
クラスメソッド
HTTPConnectイオン オブジェクト メソッド
HTTPConnection インスタンスには次のメソッドがあります:
1. request(method, url, body=None, headers={})
指定されたメソッドメソッドとURLリンクを使用して、サーバーにリクエストを送信します。
ボディ部を指定した場合は、ヘッダー部を送信してからボディ部を送信します。本体部分には、文字列、バイト オブジェクト、ファイル オブジェクト、またはバイト オブジェクトのイテレータを指定できます。ボディタイプが異なれば、要件も異なります。
header パラメーターは、辞書タイプである HTTP ヘッダーのマッピングである必要があります。
ヘッダーに Content-Length 項目が含まれていない場合は、本文に基づいて自動的に追加されます。
2. サーバーから返されるコンテンツを取得するには、リクエストの送信後に HTTPConnection.getresponse()
を呼び出す必要があります。
3. HTTPConnection.set_debuglevel(level)
debugレベルを設定します。これは、デバッグ出力がないことを意味します。
4. HTTPConnection.set_tunnel(host, port=None, headers=None)
プロキシ サーバーを使用した接続を許可する HTTP トンネル リンクのホストとポートを設定します。
5. HTTPConnection.connect()
指定されたサーバーに接続します。デフォルトでは、クライアントが接続されていない場合、このメソッドは要求に応じて自動的に呼び出されます。
6. HTTPConnection.close()
リンクを閉じます。
7. HTTPConnection.putrequest(request, selector, Skip_host=False, Skip_accept_encoding=False)
サーバーとの接続が成功したら、このメソッドを最初に呼び出す必要があります。
サーバーに送信されるコンテンツには、リクエスト文字列、セレクター文字列、HTTP プロトコルのバージョンが含まれます。
8. HTTPConnection.putheader(header, argument[, …])
HTTPヘッダーをサーバーに送信します。
サーバーに送信されるコンテンツには、ヘッダー、コロン、スペース、パラメーター リストの最初のものが含まれます。
9. HTTPConnection.endheaders(message_body=None)
ヘッダーの終わりを識別するために空行をサーバーに送信します。
10. HTTPConnection.send(data)
データをサーバーに送信します。
endheaders() メソッドの後、getresponse() メソッドの前に呼び出す必要があります。
HTTPResponse オブジェクトのメソッド
HTTPResponse インスタンスには、サーバーから返された HTTP 応答が含まれます。
リクエストヘッダーとボディ部分にアクセスするためのメソッドを提供します。
HTTPResponse は反復可能なオブジェクトであり、with ステートメントを使用して宣言できます。
HTTPResponse インスタンスには次のメソッドがあります:
1. HTTPResponse.read([amt])
応答の本文部分を読み取って返します。
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 中国語 Web サイトの他の関連記事を参照してください。