ProxyAgent は渡された endpoint を通じて接続します。平文 HTTP リクエストで Basic 認証を受け付けるプロキシの場合は、そのリクエストの Proxy-Authorization ヘッダーにプロキシのログイン情報を設定します。

import base64
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.web.client import ProxyAgent
from twisted.web.http_headers import Headers

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
token = base64.b64encode(b'alice:REPLACE_WITH_PROXY_PASSWORD')
headers = Headers({b'Proxy-Authorization': [b'Basic ' + token]})
pending = agent.request(b'GET', b'http://example.com/', headers)

この断片は、アプリケーションがすでに reactor を持っていることを前提としています。メソッド、URI、および例示したヘッダーデータはバイト値を使います。実際の認証情報はアプリケーションの認証情報ソースに保管してください。プレースホルダーはヘッダーの組み立て方だけを示します。Base64 はエンコードにすぎないため、機密性はそれを運ぶ接続に依存します。

返される Deferred はレスポンスオブジェクトを返します。そのオブジェクトを受け取ってもレスポンス本文は収集されません。ドキュメント化された本文読み取りインターフェースで読み取り、非同期の失敗を処理してください。endpoint のタイムアウトは接続確立を制限するもので、レスポンス全体の寿命を制限するものではありません。

この例は意図的に HTTP の宛先を使っています。URI スキームを変えるだけでは HTTPS 用の CONNECT ネゴシエーションは追加されません。

関連記事