20.7. httplib — HTTPプロトコルクライアント—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/httplib
移動先:案内検索

20.7。 httplib —HTTPプロトコルクライアント

ノート

httplib モジュールは、Python3でhttp.clientに名前が変更されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。


ソースコード: :source: `Lib / httplib.py`



このモジュールは、HTTPおよびHTTPSプロトコルのクライアント側を実装するクラスを定義します。 通常、直接使用されることはありません。モジュール urllib は、HTTPおよびHTTPSを使用するURLを処理するために使用します。

も参照してください

Requestsパッケージは、高レベルのHTTPクライアントインターフェイスに推奨されます。


ノート

HTTPSサポートは、 socket モジュールがSSLサポートでコンパイルされている場合にのみ使用できます。


ノート

このモジュールのパブリックインターフェイスは、Python2.0で大幅に変更されました。 HTTPクラスは、1.5.2との下位互換性のためにのみ保持されます。 新しいコードでは使用しないでください。 使用法については、オンラインのdocstringを参照してください。


このモジュールは、次のクラスを提供します。

class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])

HTTPConnection インスタンスは、HTTPサーバーとの1つのトランザクションを表します。 ホストとオプションのポート番号を渡してインスタンス化する必要があります。 ポート番号が渡されない場合、ポートはhost:portの形式であればホスト文字列から抽出され、それ以外の場合はデフォルトのHTTPポート(80)が使用されます。 trueの場合、オプションのパラメーター strict (デフォルトはfalse値)により、ステータス行を有効なHTTP / 1.0または1.1ステータス行として解析できない場合、BadStatusLineが発生します。 。 オプションの timeout パラメーターが指定されている場合、ブロック操作(接続試行など)はその秒数後にタイムアウトします(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。 オプションの source_address パラメーターは、HTTP接続の送信元アドレスとして使用する(ホスト、ポート)のタプルにすることができます。

たとえば、次の呼び出しはすべて、同じホストとポートでサーバーに接続するインスタンスを作成します。

>>> h1 = httplib.HTTPConnection('www.cwi.nl')
>>> h2 = httplib.HTTPConnection('www.cwi.nl:80')
>>> h3 = httplib.HTTPConnection('www.cwi.nl', 80)
>>> h3 = httplib.HTTPConnection('www.cwi.nl', 80, timeout=10)

バージョン2.0の新機能。

バージョン2.6で変更: timeout が追加されました。

バージョン2.7で変更: source_address が追加されました。

class httplib.HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout[, source_address[, context]]]]]]])

安全なサーバーとの通信にSSLを使用する HTTPConnection のサブクラス。 デフォルトのポートは443です。 context を指定する場合は、さまざまなSSLオプションを記述する ssl.SSLContext インスタンスである必要があります。

key_file および cert_file は非推奨です。代わりに、 ssl.SSLContext.load_cert_chain()を使用するか、 ssl.create_default_context()にを選択させてください。システムの信頼できるCA証明書。

ベストプラクティスの詳細については、セキュリティに関する考慮事項をお読みください。

バージョン2.0の新機能。

バージョン2.6で変更: timeout が追加されました。

バージョン2.7で変更: source_address が追加されました。

バージョン2.7.9で変更: context が追加されました。

このクラスは、デフォルトで必要なすべての証明書とホスト名のチェックを実行するようになりました。 以前の未確認の動作に戻すには、動作ssl._create_unverified_context()context パラメーターに渡すことができます。

class httplib.HTTPResponse(sock, debuglevel=0, strict=0)

接続に成功するとインスタンスが返されるクラス。 ユーザーが直接インスタンス化することはありません。

バージョン2.0の新機能。

class httplib.HTTPMessage
HTTPMessage インスタンスは、HTTP応答からのヘッダーを保持するために使用されます。 mimetools.Message クラスを使用して実装され、HTTPヘッダーを処理するためのユーティリティ関数を提供します。 ユーザーによって直接インスタンス化されることはありません。

必要に応じて、次の例外が発生します。

exception httplib.HTTPException

このモジュールの他の例外の基本クラス。 Exceptionのサブクラスです。

バージョン2.0の新機能。

exception httplib.NotConnected

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.InvalidURL

HTTPException のサブクラス。ポートが指定されていて、数値以外または空の場合に発生します。

バージョン2.3の新機能。

exception httplib.UnknownProtocol

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.UnknownTransferEncoding

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.UnimplementedFileMode

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.IncompleteRead

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.ImproperConnectionState

HTTPException のサブクラス。

バージョン2.0の新機能。

exception httplib.CannotSendRequest

ImpproperConnectionState のサブクラス。

バージョン2.0の新機能。

exception httplib.CannotSendHeader

ImpproperConnectionState のサブクラス。

バージョン2.0の新機能。

exception httplib.ResponseNotReady

ImpproperConnectionState のサブクラス。

バージョン2.0の新機能。

exception httplib.BadStatusLine

HTTPException のサブクラス。 サーバーが理解できないHTTPステータスコードで応答した場合に発生します。

バージョン2.0の新機能。

このモジュールで定義されている定数は次のとおりです。

httplib.HTTP_PORT
HTTPプロトコルのデフォルトポート(常に80)。
httplib.HTTPS_PORT
HTTPSプロトコルのデフォルトポート(常に443)。

また、整数ステータスコードの次の定数:

絶え間ない 価値 意味
CONTINUE 100 HTTP / 1.1、 RFC 2616、セクション10.1.1
SWITCHING_PROTOCOLS 101 HTTP / 1.1、 RFC 2616、セクション10.1.2
PROCESSING 102 WEBDAV、 RFC 2518、セクション10.1
OK 200 HTTP / 1.1、 RFC 2616、セクション10.2.1
CREATED 201 HTTP / 1.1、 RFC 2616、セクション10.2.2
ACCEPTED 202 HTTP / 1.1、 RFC 2616、セクション10.2.3
NON_AUTHORITATIVE_INFORMATION 203 HTTP / 1.1、 RFC 2616、セクション10.2.4
NO_CONTENT 204 HTTP / 1.1、 RFC 2616、セクション10.2.5
RESET_CONTENT 205 HTTP / 1.1、 RFC 2616、セクション10.2.6
PARTIAL_CONTENT 206 HTTP / 1.1、 RFC 2616、セクション10.2.7
MULTI_STATUS 207 WEBDAV RFC 2518、セクション10.2
IM_USED 226 HTTPでのデルタエンコーディング、 RFC 3229 、セクション10.4.1
MULTIPLE_CHOICES 300 HTTP / 1.1、 RFC 2616、セクション10.3.1
MOVED_PERMANENTLY 301 HTTP / 1.1、 RFC 2616、セクション10.3.2
FOUND 302 HTTP / 1.1、 RFC 2616、セクション10.3.3
SEE_OTHER 303 HTTP / 1.1、 RFC 2616、セクション10.3.4
NOT_MODIFIED 304 HTTP / 1.1、 RFC 2616、セクション10.3.5
USE_PROXY 305 HTTP / 1.1、 RFC 2616、セクション10.3.6
TEMPORARY_REDIRECT 307 HTTP / 1.1、 RFC 2616、セクション10.3.8
BAD_REQUEST 400 HTTP / 1.1、 RFC 2616、セクション10.4.1
UNAUTHORIZED 401 HTTP / 1.1、 RFC 2616、セクション10.4.2
PAYMENT_REQUIRED 402 HTTP / 1.1、 RFC 2616、セクション10.4.3
FORBIDDEN 403 HTTP / 1.1、 RFC 2616、セクション10.4.4
NOT_FOUND 404 HTTP / 1.1、 RFC 2616、セクション10.4.5
METHOD_NOT_ALLOWED 405 HTTP / 1.1、 RFC 2616、セクション10.4.6
NOT_ACCEPTABLE 406 HTTP / 1.1、 RFC 2616、セクション10.4.7
PROXY_AUTHENTICATION_REQUIRED 407 HTTP / 1.1、 RFC 2616、セクション10.4.8
REQUEST_TIMEOUT 408 HTTP / 1.1、 RFC 2616、セクション10.4.9
CONFLICT 409 HTTP / 1.1、 RFC 2616、セクション10.4.10
GONE 410 HTTP / 1.1、 RFC 2616、セクション10.4.11
LENGTH_REQUIRED 411 HTTP / 1.1、 RFC 2616、セクション10.4.12
PRECONDITION_FAILED 412 HTTP / 1.1、 RFC 2616、セクション10.4.13
REQUEST_ENTITY_TOO_LARGE 413 HTTP / 1.1、 RFC 2616、セクション10.4.14
REQUEST_URI_TOO_LONG 414 HTTP / 1.1、 RFC 2616、セクション10.4.15
UNSUPPORTED_MEDIA_TYPE 415 HTTP / 1.1、 RFC 2616、セクション10.4.16
REQUESTED_RANGE_NOT_SATISFIABLE 416 HTTP / 1.1、 RFC 2616、セクション10.4.17
EXPECTATION_FAILED 417 HTTP / 1.1、 RFC 2616、セクション10.4.18
UNPROCESSABLE_ENTITY 422 WEBDAV、 RFC 2518、セクション10.3
LOCKED 423 WEBDAV RFC 2518、セクション10.4
FAILED_DEPENDENCY 424 WEBDAV、 RFC 2518、セクション10.5
UPGRADE_REQUIRED 426 TLSへのHTTPアップグレード、 RFC 2817 、セクション6
INTERNAL_SERVER_ERROR 500 HTTP / 1.1、 RFC 2616、セクション10.5.1
NOT_IMPLEMENTED 501 HTTP / 1.1、 RFC 2616、セクション10.5.2
BAD_GATEWAY 502 HTTP / 1.1 RFC 2616、セクション10.5.3
SERVICE_UNAVAILABLE 503 HTTP / 1.1、 RFC 2616、セクション10.5.4
GATEWAY_TIMEOUT 504 HTTP / 1.1 RFC 2616、セクション10.5.5
HTTP_VERSION_NOT_SUPPORTED 505 HTTP / 1.1、 RFC 2616、セクション10.5.6
INSUFFICIENT_STORAGE 507 WEBDAV、 RFC 2518、セクション10.6
NOT_EXTENDED 510 HTTP拡張フレームワーク、 RFC 2774 、セクション7
httplib.responses

このディクショナリは、HTTP1.1ステータスコードをW3C名にマップします。

例:httplib.responses[httplib.NOT_FOUND]'Not Found'です。

バージョン2.5の新機能。

20.7.1。 HTTPConnectionオブジェクト

HTTPConnection インスタンスには次のメソッドがあります。

HTTPConnection.request(method, url[, body[, headers]])

これにより、HTTPリクエストメソッドメソッドとセレクター url を使用してサーバーにリクエストが送信されます。 body 引数が存在する場合、ヘッダーが終了した後に送信するデータの文字列である必要があります。 または、開いているファイルオブジェクトの場合もあります。その場合、ファイルの内容が送信されます。 このファイルオブジェクトは、fileno()およびread()メソッドをサポートする必要があります。 headers 引数は、リクエストとともに送信する追加のHTTPヘッダーのマッピングである必要があります。

headers にヘッダーがない場合、strの長さから本体の長さを判別できれば、すべてのメソッドにContent-Lengthヘッダーが自動的に追加されます。表現、またはディスク上のファイルの報告されたサイズから。 bodyNoneの場合、本文を予期するメソッド(PUTPOST、およびPATCH)を除いて、ヘッダーは設定されません。この場合、0に設定されます。

バージョン2.6で変更: body はファイルオブジェクトにすることができます。

HTTPConnection.getresponse()

サーバーからの応答を取得するために要求が送信された後に呼び出す必要があります。 HTTPResponse インスタンスを返します。

ノート

サーバーに新しい要求を送信する前に、応答全体を読んでおく必要があることに注意してください。

HTTPConnection.set_debuglevel(level)
デバッグレベル(出力されるデバッグ出力の量)を設定します。 デフォルトのデバッグレベルは0です。これは、デバッグ出力が出力されないことを意味します。
HTTPConnection.set_tunnel(host, port=None, headers=None)

HTTP接続トンネリングのホストとポートを設定します。 通常、プロキシサーバーを介してHTTPS接続を行う必要がある場合に使用されます。

headers引数は、CONNECTリクエストで送信する追加のHTTPヘッダーのマッピングである必要があります。

バージョン2.7の新機能。

HTTPConnection.connect()
オブジェクトの作成時に指定したサーバーに接続します。
HTTPConnection.close()
サーバーへの接続を閉じます。

上記のrequest()メソッドを使用する代わりに、以下の4つの関数を使用して、リクエストを段階的に送信することもできます。

HTTPConnection.putrequest(request, selector[, skip_host[, skip_accept_encoding]])

これは、サーバーへの接続が確立された後の最初の呼び出しである必要があります。 request 文字列、 selector 文字列、およびHTTPバージョン(HTTP/1.1)で構成される行をサーバーに送信します。 Host:またはAccept-Encoding:ヘッダーの自動送信を無効にするには(たとえば、追加のコンテンツエンコーディングを受け入れるため)、 skip_host または skip_accept_encoding をFalse以外の値で指定します。

バージョン2.4で変更: skip_accept_encoding 引数が追加されました。

HTTPConnection.putheader(header, argument[, ...])
RFC 822 スタイルのヘッダーをサーバーに送信します。 ヘッダー、コロンとスペース、および最初の引数で構成される行をサーバーに送信します。 さらに引数を指定すると、タブと引数で構成される継続行が送信されます。
HTTPConnection.endheaders(message_body=None)

ヘッダーの終わりを示す空白行をサーバーに送信します。 オプションの message_body 引数を使用して、リクエストに関連付けられたメッセージ本文を渡すことができます。 メッセージ本文は、文字列の場合はメッセージヘッダーと同じパケットで送信され、それ以外の場合は別のパケットで送信されます。

バージョン2.7で変更: message_body が追加されました。

HTTPConnection.send(data)
サーバーにデータを送信します。 これは、 endheaders()メソッドが呼び出された後、 getresponse()が呼び出される前にのみ直接使用する必要があります。


20.7.2。 HTTPResponseオブジェクト

HTTPResponse インスタンスには、次のメソッドと属性があります。

HTTPResponse.read([amt])
応答本文、または次の amt バイトまでを読み取って返します。
HTTPResponse.getheader(name[, default])
ヘッダー name の内容を取得します。一致するヘッダーがない場合は、 default を取得します。
HTTPResponse.getheaders()

(ヘッダー、値)タプルのリストを返します。

バージョン2.4の新機能。

HTTPResponse.fileno()
基になるソケットのfilenoを返します。
HTTPResponse.msg
応答ヘッダーを含む mimetools.Message インスタンス。
HTTPResponse.version
サーバーが使用するHTTPプロトコルのバージョン。 HTTP / 1.0の場合は10、HTTP /1.1の場合は11。
HTTPResponse.status
サーバーから返されたステータスコード。
HTTPResponse.reason
サーバーから返された理由句。


20.7.3。 例

GETメソッドを使用するセッションの例を次に示します。

>>> import httplib
>>> conn = httplib.HTTPSConnection("www.python.org")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
200 OK
>>> data1 = r1.read()
>>> conn.request("GET", "/")
>>> r2 = conn.getresponse()
>>> print r2.status, r2.reason
404 Not Found
>>> data2 = r2.read()
>>> conn.close()

HEADメソッドを使用するセッションの例を次に示します。 HEADメソッドがデータを返すことはないことに注意してください。

>>> import httplib
>>> conn = httplib.HTTPSConnection("www.python.org")
>>> conn.request("HEAD","/")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> data = res.read()
>>> print len(data)
0
>>> data == ''
True

POSTリクエストの方法を示すセッションの例を次に示します。

>>> import httplib, urllib
>>> params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
...            "Accept": "text/plain"}
>>> conn = httplib.HTTPConnection("bugs.python.org")
>>> conn.request("POST", "", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
302 Found
>>> data = response.read()
>>> data
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
>>> conn.close()

クライアント側のHTTP PUTリクエストは、POSTリクエストと非常によく似ています。 違いは、HTTPサーバーがPUTリクエストを介してリソースを作成できるようにするサーバー側のみです。 httplibを使用してPUTリクエストを実行する方法を示すセッションの例を次に示します。

>>> # This creates an HTTP message
>>> # with the content of BODY as the enclosed representation
>>> # for the resource http://localhost:8080/foobar
...
>>> import httplib
>>> BODY = "***filecontents***"
>>> conn = httplib.HTTPConnection("localhost", 8080)
>>> conn.request("PUT", "/file", BODY)
>>> response = conn.getresponse()
>>> print response.status, response.reason
200, OK