20.6. urllib2 — URLを開くための拡張可能なライブラリ—Pythonドキュメント
20.6。 urllib2 —URLを開くための拡張可能なライブラリ
ノート
urllib2 モジュールは、urllib.request
およびurllib.error
という名前のPython3のいくつかのモジュールに分割されています。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
urllib2 モジュールは、基本認証とダイジェスト認証、リダイレクト、Cookieなどの複雑な世界でURL(主にHTTP)を開くのに役立つ関数とクラスを定義します。
urllib2 モジュールは、次の関数を定義します。
- urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])
URL url を開きます。これは、文字列または Request オブジェクトのいずれかです。
data は、サーバーに送信する追加データを指定する文字列、またはそのようなデータが必要ない場合は
None
の場合があります。 現在、 data を使用するのはHTTPリクエストだけです。 data パラメーターが指定されている場合、HTTP要求はGETではなくPOSTになります。 data は、標準の application / x-www-form-urlencoded 形式のバッファーである必要があります。 urllib.urlencode()関数は、2タプルのマッピングまたはシーケンスを受け取り、この形式の文字列を返します。 urllib2モジュールは、Connection:close
ヘッダーを含むHTTP / 1.1リクエストを送信します。オプションの timeout パラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。 これは実際にはHTTP、HTTPS、FTP接続でのみ機能します。
context を指定する場合は、さまざまなSSLオプションを記述する ssl.SSLContext インスタンスである必要があります。 詳細については、 HTTPSConnection を参照してください。
オプションの cafile および capath パラメーターは、HTTPS要求の信頼できるCA証明書のセットを指定します。 cafile は、CA証明書のバンドルを含む単一のファイルを指す必要がありますが、 capath は、ハッシュされた証明書ファイルのディレクトリを指す必要があります。 詳細については、 ssl.SSLContext.load_verify_locations()を参照してください。
cadefault パラメーターは無視されます。
この関数は、次の3つの追加メソッドを持つファイルのようなオブジェクトを返します。
geturl()
—取得したリソースのURLを返します。これは、リダイレクトが実行されたかどうかを判断するために一般的に使用されます。info()
—ヘッダーなどのページのメタ情報を mimetools.Message インスタンスの形式で返します( HTTPヘッダーのクイックリファレンスを参照)getcode()
—応答のHTTPステータスコードを返します。
エラー時に URLError を発生させます。
ハンドラーが要求を処理しない場合、
None
が返される場合があることに注意してください(ただし、デフォルトでインストールされているグローバル OpenerDirector は、 UnknownHandler を使用して、これが発生しないようにします)。また、プロキシ設定が検出された場合(たとえば、
http_proxy
などの*_proxy
環境変数が設定されている場合)、 ProxyHandler がデフォルトでインストールされ、リクエストがプロキシを介して処理されることを確認します。バージョン2.6で変更: timeout が追加されました。
バージョン2.7.9で変更: cafile 、 capath 、 cadefault 、および context が追加されました。
- urllib2.install_opener(opener)
- OpenerDirector インスタンスをデフォルトのグローバルオープナーとしてインストールします。 オープナーのインストールは、urlopenでそのオープナーを使用する場合にのみ必要です。 それ以外の場合は、 urlopen()の代わりに OpenerDirector.open()を呼び出すだけです。 コードは実際の OpenerDirector をチェックせず、適切なインターフェイスを持つ任意のクラスが機能します。
- urllib2.build_opener([handler, ...])
OpenerDirector インスタンスを返します。これは、指定された順序でハンドラーをチェーンします。 handler は、 BaseHandler のインスタンス、または BaseHandler のサブクラスのいずれかです(この場合、パラメーターなしでコンストラクターを呼び出すことができる必要があります)。 次のクラスのインスタンスは、ハンドラーに含まれていない限り、ハンドラーの前にあります。ただし、それらのインスタンスまたはサブクラス: ProxyHandler (ifプロキシ設定が検出されました)、 UnknownHandler 、 HTTPHandler 、 HTTPDefaultErrorHandler 、 HTTPRedirectHandler 、 FTPHandler 、 FileHandler 、 HTTPErrorProcessor 。
PythonインストールでSSLがサポートされている場合(つまり、 ssl モジュールをインポートできる場合)、 HTTPSHandler も追加されます。
Python 2.3以降、 BaseHandler サブクラスは、
handler_order
属性を変更して、ハンドラーリスト内の位置を変更することもできます。
必要に応じて、次の例外が発生します。
- exception urllib2.URLError
- ハンドラーは、問題が発生したときにこの例外(または派生例外)を発生させます。
IOError
のサブクラスです。
- reason
- このエラーの理由。 メッセージ文字列または別の例外インスタンス(リモートURLの場合は socket.error 、ローカルURLの場合は
OSError
)にすることができます。
- exception urllib2.HTTPError
例外( URLError のサブクラス)ですが、 HTTPError は、例外ではないファイルのような戻り値として機能することもできます( urlopen()[ X179X]が戻ります)。 これは、認証要求などのエキゾチックなHTTPエラーを処理するときに役立ちます。
- code
RFC 2616 で定義されているHTTPステータスコード。 この数値は、 BaseHTTPServer.BaseHTTPRequestHandler.responses にあるコードのディクショナリにある値に対応します。
- reason
このエラーの理由。 メッセージ文字列または別の例外インスタンスにすることができます。
次のクラスが提供されています。
- class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
このクラスは、URLリクエストを抽象化したものです。
url は、有効なURLを含む文字列である必要があります。
data は、サーバーに送信する追加データを指定する文字列、またはそのようなデータが必要ない場合は
None
の場合があります。 現在、 data を使用するのはHTTPリクエストだけです。 data パラメーターが指定されている場合、HTTP要求はGETではなくPOSTになります。 data は、標準の application / x-www-form-urlencoded 形式のバッファーである必要があります。 urllib.urlencode()関数は、2タプルのマッピングまたはシーケンスを受け取り、この形式の文字列を返します。headers は辞書である必要があり、 add_header()が各キーと値を引数として呼び出されたかのように扱われます。 これは、ブラウザが自身を識別するために使用する
User-Agent
ヘッダー値を「スプーフィング」するためによく使用されます。一部のHTTPサーバーは、スクリプトではなく、一般的なブラウザからのリクエストのみを許可します。 たとえば、MozillaFirefoxは自分自身を"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
として識別しますが、 urllib2 のデフォルトのユーザーエージェント文字列は"Python-urllib/2.6"
(Python 2.6の場合)です。最後の2つの引数は、サードパーティのHTTPCookieを正しく処理するためにのみ重要です。
origin_req_host は、 RFC 2965 で定義されているように、オリジントランザクションのリクエストホストである必要があります。 デフォルトは
cookielib.request_host(self)
です。 これは、ユーザーによって開始された元の要求のホスト名またはIPアドレスです。 たとえば、リクエストがHTMLドキュメント内の画像に対するものである場合、これは画像を含むページに対するリクエストのリクエストホストである必要があります。unverizable は、RFC 2965で定義されているように、要求が検証不可能かどうかを示す必要があります。 デフォルトは
False
です。 検証不可能なリクエストとは、ユーザーが承認するオプションがなかったURLのリクエストです。 たとえば、リクエストがHTMLドキュメント内の画像に対するものであり、ユーザーが画像の自動フェッチを承認するオプションがなかった場合、これは当てはまるはずです。
- class urllib2.OpenerDirector
- OpenerDirector クラスは、チェーンされた BaseHandler を介してURLを開きます。 ハンドラーのチェーンとエラーからの回復を管理します。
- class urllib2.BaseHandler
- これは、登録されているすべてのハンドラーの基本クラスであり、登録の単純なメカニズムのみを処理します。
- class urllib2.HTTPDefaultErrorHandler
- HTTPエラー応答のデフォルトハンドラーを定義するクラス。 すべての応答は HTTPError 例外に変換されます。
- class urllib2.HTTPRedirectHandler
- リダイレクトを処理するクラス。
- class urllib2.HTTPCookieProcessor([cookiejar])
- HTTPCookieを処理するクラス。
- class urllib2.ProxyHandler([proxies])
リクエストにプロキシを経由させます。 プロキシを指定する場合は、プロトコル名をプロキシのURLにマッピングする辞書である必要があります。 デフォルトでは、環境変数
<protocol>_proxy
からプロキシのリストを読み取ります。 プロキシ環境変数が設定されていない場合、Windows環境では、プロキシ設定はレジストリの[インターネット設定]セクションから取得され、Mac OS X環境では、プロキシ情報はOSXシステム構成フレームワークから取得されます。自動検出されたプロキシを無効にするには、空の辞書を渡します。
ノート
変数
REQUEST_METHOD
が設定されている場合、HTTP_PROXY
は無視されます。 getproxies()のドキュメントを参照してください。
- class urllib2.HTTPPasswordMgr
(realm, uri) -> (user, password)
マッピングのデータベースを保持します。
- class urllib2.HTTPPasswordMgrWithDefaultRealm
(realm, uri) -> (user, password)
マッピングのデータベースを保持します。None
のレルムは、キャッチオールレルムと見なされ、他のレルムが適合しない場合に検索されます。
- class urllib2.AbstractBasicAuthHandler([password_mgr])
- これは、リモートホストとプロキシの両方に対するHTTP認証を支援するミックスインクラスです。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.HTTPBasicAuthHandler([password_mgr])
- リモートホストで認証を処理します。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.ProxyBasicAuthHandler([password_mgr])
- プロキシで認証を処理します。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.AbstractDigestAuthHandler([password_mgr])
- これは、リモートホストとプロキシの両方に対するHTTP認証を支援するミックスインクラスです。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.HTTPDigestAuthHandler([password_mgr])
- リモートホストで認証を処理します。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.ProxyDigestAuthHandler([password_mgr])
- プロキシで認証を処理します。 password_mgr は、指定されている場合、 HTTPPasswordMgr と互換性のあるものである必要があります。 サポートする必要のあるインターフェイスについては、セクション HTTPPasswordMgrオブジェクトを参照してください。
- class urllib2.HTTPHandler
- HTTPURLのオープンを処理するクラス。
- class urllib2.HTTPSHandler([debuglevel[, context]])
HTTPSURLのオープンを処理するクラス。 context は、 httplib.HTTPSConnection と同じ意味です。
バージョン2.7.9で変更: コンテキストが追加されました。
- class urllib2.FileHandler
- ローカルファイルを開きます。
- class urllib2.FTPHandler
- FTPURLを開きます。
- class urllib2.CacheFTPHandler
- FTP URLを開き、開いているFTP接続のキャッシュを保持して、遅延を最小限に抑えます。
- class urllib2.UnknownHandler
- 不明なURLを処理するためのキャッチオールクラス。
- class urllib2.HTTPErrorProcessor
- HTTPエラー応答を処理します。
20.6.1。 リクエストオブジェクト
次のメソッドは、 Request のすべてのパブリックインターフェイスを記述しているため、すべてをサブクラスでオーバーライドする必要があります。
- Request.add_data(data)
- Request データを data に設定します。 これは、HTTPハンドラーを除くすべてのハンドラーによって無視されます。バイト文字列が必要であり、要求が
GET
ではなくPOST
に変更されます。
- Request.get_method()
- HTTPリクエストメソッドを示す文字列を返します。 これはHTTPリクエストに対してのみ意味があり、現在は常に
'GET'
または'POST'
を返します。
- Request.has_data()
- インスタンスに
None
以外のデータがあるかどうかを返します。
- Request.get_data()
- インスタンスのデータを返します。
- Request.add_header(key, val)
- リクエストに別のヘッダーを追加します。 ヘッダーは現在、サーバーに送信されるヘッダーのリストに追加されるHTTPハンドラーを除くすべてのハンドラーによって無視されます。 同じ名前のヘッダーが複数存在することはできません。キーが衝突した場合、後の呼び出しで前の呼び出しが上書きされることに注意してください。 現在、これはHTTP機能の損失ではありません。これは、複数回使用されたときに意味を持つすべてのヘッダーには、1つのヘッダーのみを使用して同じ機能を取得する(ヘッダー固有の)方法があるためです。
- Request.add_unredirected_header(key, header)
リダイレクトされたリクエストに追加されないヘッダーを追加します。
バージョン2.4の新機能。
- Request.has_header(header)
インスタンスに名前付きヘッダーがあるかどうかを返します(通常とリダイレクトなしの両方をチェックします)。
バージョン2.4の新機能。
- Request.get_full_url()
- コンストラクターで指定されたURLを返します。
- Request.get_type()
- URLのタイプを返します—スキームとも呼ばれます。
- Request.get_host()
- 接続が確立されるホストを返します。
- Request.get_selector()
- セレクターを返します—サーバーに送信されるURLの一部。
- Request.get_header(header_name, default=None)
- 指定されたヘッダーの値を返します。 ヘッダーが存在しない場合は、デフォルト値を返します。
- Request.header_items()
- リクエストヘッダーのタプル(header_name、header_value)のリストを返します。
- Request.set_proxy(host, type)
- プロキシサーバーに接続してリクエストを準備します。 host と type はインスタンスのものを置き換え、インスタンスのセレクターはコンストラクターで指定された元のURLになります。
- Request.get_origin_req_host()
- RFC 2965 で定義されているように、オリジントランザクションのリクエストホストを返します。 Request コンストラクターのドキュメントを参照してください。
- Request.is_unverifiable()
- RFC 2965で定義されているように、要求が検証不可能かどうかを返します。 Request コンストラクターのドキュメントを参照してください。
20.6.2。 OpenerDirectorオブジェクト
OpenerDirector インスタンスには次のメソッドがあります。
- OpenerDirector.add_handler(handler)
- handler は BaseHandler のインスタンスである必要があります。 次のメソッドが検索され、可能なチェーンに追加されます(HTTPエラーは特殊なケースであることに注意してください)。
protocol_open
—ハンドラーがプロトコル URLを開く方法を知っていることを通知します。http_error_type
—ハンドラーがHTTPエラーコード type でHTTPエラーを処理する方法を知っていることを通知します。protocol_error
—ハンドラーが(http
以外)プロトコルからのエラーを処理する方法を知っていることを通知します。protocol_request
—ハンドラーがプロトコル要求を前処理する方法を知っていることを通知します。protocol_response
—ハンドラーがプロトコル応答を後処理する方法を知っていることを通知します。
- OpenerDirector.open(url[, data][, timeout])
指定された url (リクエストオブジェクトまたは文字列の場合があります)を開き、オプションで指定された data を渡します。 発生する引数、戻り値、および例外は、 urlopen()(現在インストールされているグローバル OpenerDirector で open()メソッドを呼び出すだけです)と同じです。 。 オプションの timeout パラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。 タイムアウト機能は、実際にはHTTP、HTTPS、およびFTP接続でのみ機能します)。
バージョン2.6で変更: timeout が追加されました。
- OpenerDirector.error(proto[, arg[, ...]])
指定されたプロトコルのエラーを処理します。 これにより、指定された引数(プロトコル固有)を使用して、指定されたプロトコルの登録済みエラーハンドラーが呼び出されます。 HTTPプロトコルは、HTTP応答コードを使用して特定のエラーハンドラーを判別する特殊なケースです。 ハンドラークラスの
http_error_*()
メソッドを参照してください。発生する戻り値と例外は、 urlopen()と同じです。
OpenerDirectorオブジェクトは、次の3つの段階でURLを開きます。
これらのメソッドが各ステージ内で呼び出される順序は、ハンドラーインスタンスを並べ替えることによって決定されます。
protocol_request
のような名前のメソッドを持つすべてのハンドラーには、リクエストを前処理するために呼び出されるそのメソッドがあります。protocol_open
のような名前のメソッドを持つハンドラーは、要求を処理するために呼び出されます。 この段階は、ハンドラーが None 以外の値を返すと終了します(つまり、 応答)、または例外を発生させます(通常は URLError )。 例外は伝播できます。実際、上記のアルゴリズムは、
default_open()
という名前のメソッドに対して最初に試行されます。 そのようなすべてのメソッドが None を返す場合、protocol_open
のような名前のメソッドに対してアルゴリズムが繰り返されます。 そのようなすべてのメソッドが None を返す場合、unknown_open()
という名前のメソッドに対してアルゴリズムが繰り返されます。これらのメソッドの実装には、親 OpenerDirector インスタンスの open()および error()メソッドの呼び出しが含まれる場合があることに注意してください。
protocol_response
のような名前のメソッドを持つすべてのハンドラーには、応答を後処理するために呼び出されるそのメソッドがあります。
20.6.3。 BaseHandlerオブジェクト
BaseHandler オブジェクトは、直接役立つメソッドと、派生クラスで使用されることを意図したメソッドをいくつか提供します。 これらは直接使用することを目的としています。
- BaseHandler.add_parent(director)
- 親としてディレクターを追加します。
- BaseHandler.close()
- 親を削除します。
次の属性とメソッドは、 BaseHandler から派生したクラスでのみ使用する必要があります。
ノート
protocol_request()
またはprotocol_response()
メソッドを定義するサブクラスには*Processor
という名前が付けられるという規則が採用されています。 他のすべての名前は*Handler
です。
- BaseHandler.parent
- 有効な OpenerDirector 。これを使用して、別のプロトコルを使用して開いたり、エラーを処理したりできます。
- BaseHandler.default_open(req)
このメソッドは BaseHandler で定義されているではなくですが、すべてのURLをキャッチする場合は、サブクラスで定義する必要があります。
このメソッドが実装されている場合、親 OpenerDirector によって呼び出されます。 OpenerDirector または
None
の open()の戻り値で説明されているように、ファイルのようなオブジェクトを返す必要があります。 本当に例外的なことが起こらない限り、 URLError を発生させる必要があります(たとえば、MemoryError
を URLError にマップしないでください)。このメソッドは、プロトコル固有のopenメソッドの前に呼び出されます。
- BaseHandler.protocol_open(req)
(「プロトコル」はプロトコル名に置き換えられます。)
このメソッドは BaseHandler で定義されたではなくですが、指定されたプロトコルでURLを処理する場合は、サブクラスで定義する必要があります。
このメソッドは、定義されている場合、親 OpenerDirector によって呼び出されます。 戻り値は、 default_open()の場合と同じである必要があります。
- BaseHandler.unknown_open(req)
このメソッドは BaseHandler で定義されている not ですが、特定の登録済みハンドラーがないすべてのURLをキャッチして開く場合は、サブクラスで定義する必要があります。
このメソッドが実装されている場合、親 OpenerDirector によって呼び出されます。 戻り値は、 default_open()の場合と同じである必要があります。
- BaseHandler.http_error_default(req, fp, code, msg, hdrs)
このメソッドは BaseHandler で定義されている not ですが、サブクラスは、他の方法で処理されないHTTPエラーのキャッチオールを提供する場合は、このメソッドをオーバーライドする必要があります。 OpenerDirector がエラーを取得すると自動的に呼び出されますが、他の状況では通常は呼び出されません。
req は Request オブジェクト、 fp はHTTPエラー本体を持つファイルのようなオブジェクト、 code は3つになります-エラーの数字コード。 msg はユーザーに表示されるコードの説明であり、 hdrs はエラーのヘッダーを持つマッピングオブジェクトです。
発生する戻り値と例外は、 urlopen()のものと同じである必要があります。
- BaseHandler.http_error_nnn(req, fp, code, msg, hdrs)
nnn は3桁のHTTPエラーコードである必要があります。 このメソッドも BaseHandler で定義されていませんが、存在する場合は、コード nnn のHTTPエラーが発生すると、サブクラスのインスタンスで呼び出されます。
サブクラスは、特定のHTTPエラーを処理するために、このメソッドをオーバーライドする必要があります。
発生する引数、戻り値、および例外は、 http_error_default()の場合と同じである必要があります。
- BaseHandler.protocol_request(req)
(「プロトコル」はプロトコル名に置き換えられます。)
このメソッドは BaseHandler で定義されたではなくですが、指定されたプロトコルのリクエストを前処理する場合は、サブクラスで定義する必要があります。
このメソッドは、定義されている場合、親 OpenerDirector によって呼び出されます。 req は Request オブジェクトになります。 戻り値は Request オブジェクトである必要があります。
- BaseHandler.protocol_response(req, response)
(「プロトコル」はプロトコル名に置き換えられます。)
このメソッドは、 BaseHandler で定義されたではなくですが、指定されたプロトコルの応答を後処理する場合は、サブクラスで定義する必要があります。
このメソッドは、定義されている場合、親 OpenerDirector によって呼び出されます。 req は Request オブジェクトになります。 response は、 urlopen()の戻り値と同じインターフェイスを実装するオブジェクトになります。 戻り値は、 urlopen()の戻り値と同じインターフェイスを実装する必要があります。
20.6.4。 HTTPRedirectHandlerオブジェクト
ノート
一部のHTTPリダイレクトでは、このモジュールのクライアントコードからのアクションが必要です。 この場合、 HTTPError が発生します。 さまざまなリダイレクトコードの正確な意味の詳細については、 RFC 2616 を参照してください。
- HTTPRedirectHandler.redirect_request(req, fp, code, msg, hdrs, newurl)
リダイレクトに応答して、 Request または
None
を返します。 これは、サーバーからリダイレクトを受信したときに、http_error_30*()
メソッドのデフォルトの実装によって呼び出されます。 リダイレクトが必要な場合は、新しい Request を返して、http_error_30*()
が newurl へのリダイレクトを実行できるようにします。 それ以外の場合、他のハンドラーがこのURLを処理しようとしない場合は、 HTTPError を発生させ、他のハンドラーが処理できない場合はNone
を返します。ノート
このメソッドのデフォルトの実装は、 RFC 2616 に厳密には準拠していません。つまり、
POST
要求に対する301および302応答は、ユーザーの確認なしに自動的にリダイレクトされてはなりません。 。 実際には、ブラウザはこれらの応答の自動リダイレクトを許可し、POSTをGET
に変更し、デフォルトの実装はこの動作を再現します。
- HTTPRedirectHandler.http_error_301(req, fp, code, msg, hdrs)
Location:
またはURI:
のURLにリダイレクトします。 このメソッドは、HTTPの「永続的に移動」応答を取得するときに親 OpenerDirector によって呼び出されます。
- HTTPRedirectHandler.http_error_302(req, fp, code, msg, hdrs)
- http_error_301()と同じですが、「見つかった」応答が必要です。
- HTTPRedirectHandler.http_error_303(req, fp, code, msg, hdrs)
- http_error_301()と同じですが、「他を参照」応答が必要です。
- HTTPRedirectHandler.http_error_307(req, fp, code, msg, hdrs)
- http_error_301()と同じですが、「一時的なリダイレクト」応答が必要です。
20.6.6。 ProxyHandlerオブジェクト
- ProxyHandler.protocol_open(request)
(「プロトコル」はプロトコル名に置き換えられます。)
ProxyHandler には、コンストラクターで指定された proxys ディクショナリにプロキシがあるすべての protocol に対してメソッド
protocol_open
があります。 このメソッドは、request.set_proxy()
を呼び出すことによってプロキシを通過するように要求を変更し、チェーン内の次のハンドラーを呼び出して実際にプロトコルを実行します。
20.6.7。 HTTPPasswordMgrオブジェクト
これらのメソッドは、 HTTPPasswordMgr および HTTPPasswordMgrWithDefaultRealm オブジェクトで使用できます。
- HTTPPasswordMgr.add_password(realm, uri, user, passwd)
- uri は、単一のURIまたは一連のURIのいずれかです。 realm 、 user 、および passwd は文字列である必要があります。 これにより、レルムの認証および指定されたURIのいずれかのスーパーURIが指定されたときに、
(user, passwd)
が認証トークンとして使用されます。
- HTTPPasswordMgr.find_user_password(realm, authuri)
指定されたレルムとURIがある場合は、そのユーザー/パスワードを取得します。 一致するユーザー/パスワードがない場合、このメソッドは
(None, None)
を返します。HTTPPasswordMgrWithDefaultRealm オブジェクトの場合、指定されたレルムに一致するユーザー/パスワードがない場合、レルム
None
が検索されます。
20.6.8。 AbstractBasicAuthHandlerオブジェクト
- AbstractBasicAuthHandler.http_error_auth_reqed(authreq, host, req, headers)
ユーザーとパスワードのペアを取得し、要求を再試行することにより、認証要求を処理します。 authreq は、レルムに関する情報がリクエストに含まれているヘッダーの名前である必要があります。 host は、認証するURLとパスを指定し、 req は認証する必要があります。 (失敗した) Request オブジェクトであり、 headers はエラーヘッダーである必要があります。
host はいずれかの機関です(例:
"python.org"
)または権限コンポーネントを含むURL(例:"http://python.org/%22
)。 いずれの場合も、権限にuserinfoコンポーネントを含めることはできません(したがって、"python.org"
および"python.org:80"
は問題ありませんが、"joe:[email protected]"
は問題ありません)。
20.6.9。 HTTPBasicAuthHandlerオブジェクト
- HTTPBasicAuthHandler.http_error_401(req, fp, code, msg, hdrs)
- 可能な場合は、認証情報を使用して要求を再試行してください。
20.6.10。 ProxyBasicAuthHandlerオブジェクト
- ProxyBasicAuthHandler.http_error_407(req, fp, code, msg, hdrs)
- 可能な場合は、認証情報を使用して要求を再試行してください。
20.6.11。 AbstractDigestAuthHandlerオブジェクト
- AbstractDigestAuthHandler.http_error_auth_reqed(authreq, host, req, headers)
- authreq は、レルムに関する情報がリクエストに含まれているヘッダーの名前である必要があります。 host は、認証先のホストである必要があります。 req は、 (失敗した) Request オブジェクト、および headers はエラーヘッダーである必要があります。
20.6.12。 HTTPDigestAuthHandlerオブジェクト
- HTTPDigestAuthHandler.http_error_401(req, fp, code, msg, hdrs)
- 可能な場合は、認証情報を使用して要求を再試行してください。
20.6.13。 ProxyDigestAuthHandlerオブジェクト
- ProxyDigestAuthHandler.http_error_407(req, fp, code, msg, hdrs)
- 可能な場合は、認証情報を使用して要求を再試行してください。
20.6.14。 HTTPHandlerオブジェクト
- HTTPHandler.http_open(req)
req.has_data()
に応じて、GETまたはPOSTのいずれかのHTTPリクエストを送信します。
20.6.15。 HTTPSHandlerオブジェクト
- HTTPSHandler.https_open(req)
req.has_data()
に応じて、GETまたはPOSTのいずれかのHTTPSリクエストを送信します。
20.6.16。 FileHandlerオブジェクト
- FileHandler.file_open(req)
- ホスト名がない場合、またはホスト名が
'localhost'
の場合は、ファイルをローカルで開きます。 それ以外の場合はプロトコルをftp
に変更し、parent
を使用してプロトコルを開いてみてください。
20.6.17。 FTPHandlerオブジェクト
- FTPHandler.ftp_open(req)
- req で示されるFTPファイルを開きます。 ログインは常に空のユーザー名とパスワードで行われます。
20.6.18。 CacheFTPHandlerオブジェクト
CacheFTPHandler オブジェクトは、次の追加メソッドを持つ FTPHandler オブジェクトです。
- CacheFTPHandler.setTimeout(t)
- 接続のタイムアウトを t 秒に設定します。
- CacheFTPHandler.setMaxConns(m)
- キャッシュ接続の最大数を m に設定します。
20.6.20。 HTTPErrorProcessorオブジェクト
バージョン2.4の新機能。
- HTTPErrorProcessor.http_response()
HTTPエラー応答を処理します。
200のエラーコードの場合、応答オブジェクトはすぐに返されます。
200以外のエラーコードの場合、これは OpenerDirector.error()を介して
protocol_error_code
ハンドラーメソッドにジョブを渡すだけです。 最終的に、他のハンドラーがエラーを処理しない場合、 urllib2.HTTPDefaultErrorHandler は HTTPError を発生させます。
- HTTPErrorProcessor.https_response()
HTTPSエラー応答を処理します。
動作は http_response()と同じです。
20.6.21。 例
以下の例に加えて、 HOWTO Fetch Internet Resources Using urllib2 にさらに多くの例が示されています。
この例では、python.orgのメインページを取得し、その最初の100バイトを表示します。
>>> import urllib2
>>> f = urllib2.urlopen('http://www.python.org/')
>>> print f.read(100)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?xml-stylesheet href="./css/ht2html
ここでは、CGIのstdinにデータストリームを送信し、それが返すデータを読み取ります。 この例は、PythonインストールがSSLをサポートしている場合にのみ機能することに注意してください。
>>> import urllib2
>>> req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi',
... data='This data is passed to stdin of the CGI')
>>> f = urllib2.urlopen(req)
>>> print f.read()
Got Data: "This data is passed to stdin of the CGI"
上記の例で使用されているサンプルCGIのコードは次のとおりです。
#!/usr/bin/env python
import sys
data = sys.stdin.read()
print 'Content-type: text-plain\n\nGot Data: "%s"' % data
基本HTTP認証の使用:
import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')
build_opener()は、 ProxyHandler を含む、多くのハンドラーをデフォルトで提供します。 デフォルトでは、 ProxyHandler は<scheme>_proxy
という名前の環境変数を使用します。ここで、<scheme>
は関連するURLスキームです。 たとえば、 http_proxy
環境変数が読み取られ、HTTPプロキシのURLが取得されます。
この例では、デフォルトの ProxyHandler を、プログラムで提供されたプロキシURLを使用するものに置き換え、 ProxyBasicAuthHandler でプロキシ認証サポートを追加します。
proxy_handler = urllib2.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib2.build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('http://www.example.com/login.html')
HTTPヘッダーの追加:
headers 引数を Request コンストラクターに使用するか、次のようにします。
import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
# Customize the default User-Agent header value:
req.add_header('User-Agent', 'urllib-example/0.1 (Contact: . . .)')
r = urllib2.urlopen(req)
OpenerDirector は、すべての Request に User-Agent ヘッダーを自動的に追加します。 これを変更するには:
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')
また、 Request が渡されると、いくつかの標準ヘッダー( Content-Length 、 Content-Type 、 Host )が追加されることに注意してください。 urlopen()(または OpenerDirector.open())へ。