ホームページ  >  記事  >  バックエンド開発  >  Python3 の http.client モジュールについての深い理解

Python3 の http.client モジュールについての深い理解

高洛峰
高洛峰オリジナル
2017-03-31 09:42:287198ブラウズ

この記事では、主に Python3 の http.client モジュールに関する関連情報を紹介します。詳細については、必要な友人が参照してください。

http モジュールの紹介

Python3 の http パッケージには、低レベルの HTTP プロトコルです。上位レベルの urllib.request モジュールによって使用される

  • http.server には、socketserver に基づく基本的な HTTP サーバー クラスが含まれています。

  • http モジュールは、一連の HTTP

    ステータス コード
  • も定義します
  • http.client モジュールが定義されています。 http および https プロトコル クライアントを実装するクラス。
  • このモジュールは通常は直接使用されませんが、カプセル化された urllib.request モジュールを使用して URL を処理します。

  • 1、http.client.HTTP_PORT

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 クラス

HTTPConnection クラス

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。