# 6 `httplib` -- HTTP プロトコルクライアント

このモジュールでは HTTP および HTTPS プロトコルのクライアント側 を実装しているクラスを定義しています。通常、このモジュールは直接 使いません -- `urllib` モジュールが HTTP や HTTPS を使った URL を扱う上でこのモジュールを使います。 注意: HTTPS のサポートは、SSL をサポートするように `socket` モジュールをコンパイルした場合にのみ利用できます。

このモジュールでは以下のクラスを提供しています:

クラス `HTTPConnection`( | host[, port])

  `HTTPConnection` インスタンスは、HTTP サーバとの一回の トランザクションを表現します。インスタンスの生成はホスト名と オプションのポート番号を与えて行います。ポート番号を指定しなかった 場合、ホスト名文字列が `host:port` の形式であれば、ホスト名からポート番号を導き、そうでない 場合には標準の HTTP ポート番号 (80) を使います。例えば、 以下の呼び出しは全て同じサーバの同じポートに接続するインスタンス を生成します:

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

クラス `HTTPSConnection`( | host[, port, key_file, cert_file])

  `HTTPConnection` のサブクラスで、セキュアなサーバと 通信するために SSL を使います。標準のポート番号は `443` です。 key_fileには、秘密鍵を格納したPEM形式ファイルのファイル名を指定します。cert_fileには、PEM形式の証明書チェーンファイルを指定します。

  警告: この関数は証明書の検査を行いません！

必要に応じて以下の例外が送出されます:

exception `HTTPException`
  このモジュールにおける他の例外クラスの基底クラスです。 `Exception` のサブクラスです。

exception `NotConnected`
  `HTTPException` サブクラスです。

exception `InvalidURL`
  `HTTPException` のサブクラスです。ポート番号を指定した ものの、その値が数字でなかったり空のオブジェクトであった場合に送出されます。

exception `UnknownProtocol`
  `HTTPException` のサブクラスです。

exception `UnknownTransferEncoding`
  `HTTPException` のサブクラスです。

exception `IllegalKeywordArgument`
  `HTTPException` のサブクラスです。

exception `UnimplementedFileMode`
  `HTTPException` のサブクラスです。

exception `IncompleteRead`
  `HTTPException` のサブクラスです。

exception `ImproperConnectionState`
  `HTTPException` のサブクラスです。

exception `CannotSendRequest`
  `ImproperConnectionState` のサブクラスです。

exception `CannotSendHeader`
  `ImproperConnectionState` のサブクラスです。

exception `ResponseNotReady`
  `ImproperConnectionState` のサブクラスです。

exception `BadStatusLine`
  `HTTPException` のサブクラスです。 サーバが理解できない HTTP 状態コードで応答した場合に送出されます。

このモジュールで定義されている定数は以下の通りです:

`HTTP_PORT`
  HTTP プロトコルの標準のポート (通常は `80`) です。

`HTTPS_PORT`
  HTTPS プロトコルの標準のポート (通常は `443`) です。

また、整数の状態コードについて以下の定数が定義されています:

Constant | Value | Definition
--- | --- | ---
`CONTINUE` | `100` | HTTP/1.1, RFC 2616, Section 10.1.1
`SWITCHING_PROTOCOLS` | `101` | HTTP/1.1, RFC 2616, Section 10.1.2
`PROCESSING` | `102` | WEBDAV, RFC 2518, Section 10.1

`OK` | `200` | HTTP/1.1, RFC 2616, Section 10.2.1
`CREATED` | `201` | HTTP/1.1, RFC 2616, Section 10.2.2
`ACCEPTED` | `202` | HTTP/1.1, RFC 2616, Section 10.2.3
`NON_AUTHORITATIVE_INFORMATION` | `203` | HTTP/1.1, RFC 2616, Section 10.2.4
`NO_CONTENT` | `204` | HTTP/1.1, RFC 2616, Section 10.2.5
`RESET_CONTENT` | `205` | HTTP/1.1, RFC 2616, Section 10.2.6
`PARTIAL_CONTENT` | `206` | HTTP/1.1, RFC 2616, Section 10.2.7
`MULTI_STATUS` | `207` | WEBDAV RFC 2518, Section 10.2
`IM_USED` | `226` | Delta encoding in HTTP, RFC 3229, Section 10.4.1

`MULTIPLE_CHOICES` | `300` | HTTP/1.1, RFC 2616, Section 10.3.1
`MOVED_PERMANENTLY` | `301` | HTTP/1.1, RFC 2616, Section 10.3.2
`FOUND` | `302` | HTTP/1.1, RFC 2616, Section 10.3.3
`SEE_OTHER` | `303` | HTTP/1.1, RFC 2616, Section 10.3.4
`NOT_MODIFIED` | `304` | HTTP/1.1, RFC 2616, Section 10.3.5
`USE_PROXY` | `305` | HTTP/1.1, RFC 2616, Section 10.3.6
`TEMPORARY_REDIRECT` | `307` | HTTP/1.1, RFC 2616, Section 10.3.8

`BAD_REQUEST` | `400` | HTTP/1.1, RFC 2616, Section 10.4.1
`UNAUTHORIZED` | `401` | HTTP/1.1, RFC 2616, Section 10.4.2
`PAYMENT_REQUIRED` | `402` | HTTP/1.1, RFC 2616, Section 10.4.3
`FORBIDDEN` | `403` | HTTP/1.1, RFC 2616, Section 10.4.4
`NOT_FOUND` | `404` | HTTP/1.1, RFC 2616, Section 10.4.5
`METHOD_NOT_ALLOWED` | `405` | HTTP/1.1, RFC 2616, Section 10.4.6
`NOT_ACCEPTABLE` | `406` | HTTP/1.1, RFC 2616, Section 10.4.7
`PROXY_AUTHENTICATION_REQUIRED` | `407` | HTTP/1.1, RFC 2616, Section 10.4.8
`REQUEST_TIMEOUT` | `408` | HTTP/1.1, RFC 2616, Section 10.4.9
`CONFLICT` | `409` | HTTP/1.1, RFC 2616, Section 10.4.10
`GONE` | `410` | HTTP/1.1, RFC 2616, Section 10.4.11
`LENGTH_REQUIRED` | `411` | HTTP/1.1, RFC 2616, Section 10.4.12
`PRECONDITION_FAILED` | `412` | HTTP/1.1, RFC 2616, Section 10.4.13
`REQUEST_ENTITY_TOO_LARGE` | `413` | HTTP/1.1, RFC 2616, Section 10.4.14
`REQUEST_URI_TOO_LONG` | `414` | HTTP/1.1, RFC 2616, Section 10.4.15
`UNSUPPORTED_MEDIA_TYPE` | `415` | HTTP/1.1, RFC 2616, Section 10.4.16
`REQUESTED_RANGE_NOT_SATISFIABLE` | `416` | HTTP/1.1, RFC 2616, Section 10.4.17
`EXPECTATION_FAILED` | `417` | HTTP/1.1, RFC 2616, Section 10.4.18
`UNPROCESSABLE_ENTITY` | `422` | WEBDAV, RFC 2518, Section 10.3
`LOCKED` | `423` | WEBDAV RFC 2518, Section 10.4
`FAILED_DEPENDENCY` | `424` | WEBDAV, RFC 2518, Section 10.5
`UPGRADE_REQUIRED` | `426` | HTTP Upgrade to TLS, RFC 2817, Section 6

`INTERNAL_SERVER_ERROR` | `500` | HTTP/1.1, RFC 2616, Section 10.5.1
`NOT_IMPLEMENTED` | `501` | HTTP/1.1, RFC 2616, Section 10.5.2
`BAD_GATEWAY` | `502` | HTTP/1.1 RFC 2616, Section 10.5.3
`SERVICE_UNAVAILABLE` | `503` | HTTP/1.1, RFC 2616, Section 10.5.4
`GATEWAY_TIMEOUT` | `504` | HTTP/1.1 RFC 2616, Section 10.5.5
`HTTP_VERSION_NOT_SUPPORTED` | `505` | HTTP/1.1, RFC 2616, Section 10.5.6
`INSUFFICIENT_STORAGE` | `507` | WEBDAV, RFC 2518, Section 10.6
`NOT_EXTENDED` | `510` | An HTTP Extension Framework, RFC 2774, Section 7