Python の urllib オープナー1つで Cookie とプロキシを使う
ProxyHandler と HTTPCookieProcessor を1つの urllib オープナーにまとめ、関連するプロキシ経由のリクエストが意図した Cookie ジャーを共有するようにします。
urllib オープナーはリクエストをプロキシ経由で送り、同時にサイトの Cookie を保持できます。両方のハンドラーを渡します。
from http.cookiejar import CookieJar
from urllib.request import (
HTTPCookieProcessor, ProxyHandler, build_opener,
)
cookies = CookieJar()
opener = build_opener(
ProxyHandler({"http": "http://proxy.example:8080"}),
HTTPCookieProcessor(cookies),
)
with opener.open("http://www.example.com/", timeout=10) as response:
body = response.read()例では通常の HTTP 宛先とその明示的なプロキシ経路を使っています。プロキシ認証なしで許可された公開サイトを確認するには、その経路用の候補をHTTP プロキシ一覧から選び、意図した Cookie ジャーを保ちます。同じサイトセッションの後続リクエストには opener を再利用します。Cookie プロセッサーは受け入れ可能な応答 Cookie を取り出し、該当するものを後続リクエストに追加します。
呼び出しのたびに新しい空の CookieJar を作ると、その連続性が失われます。ジャーはそれが表すセッションと一緒に保ち、Cookie を分けるべきアカウントやワークフローには別のジャーを使ってください。
基本の CookieJar は状態をメモリに保持します。プログラム実行間で永続化するには、適切な FileCookieJar サブクラスを選び、意図的に保存または読み込みます。
この構成にグローバルな opener をインストールする必要はありません。このオブジェクトの open メソッドを呼べば、プロキシと Cookie が同じ操作に結び付いたままになります。