Tornadoは1つの非同期HTTPクライアントインターフェースを公開していますが、その下には異なる実装があります。そのため、プロキシのエンドポイントが正しくても、選択した実装によってプロキシオプションが失敗することがあります。

HTTPクライアントのドキュメントは SimpleAsyncHTTPClient をデフォルトの実装として示し、curlベースの代替も文書化しています。proxy_host のようなリクエストオプションには実装固有のサポートに関する注記があります。fetch呼び出しにオプションを追加する前に、その注記を読んでください。

クライアントを構築する前に設定する

curlバックエンドをすでに備えた環境では、共有クライアントを作成する前にそれを選択できます:

from tornado.httpclient import AsyncHTTPClient

AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')
client = AsyncHTTPClient()

次に、目的の呼び出しに対して、文書化されたプロキシのホスト、ポート、認証、タイムアウトのリクエストオプションを使用します。ホスト名と数値ポートは分けて扱ってください。バックエンドを選んでも、それ自体でプロキシのエンドポイントが選ばれるわけではありません。許可された公開HTTPルートについては、HTTPプロキシ一覧がそれらのリクエストオプション向けのホストとポートの候補を提供します。

クライアントの構築が重要なのは、このコードが実行される前にアプリケーションやフレームワークがHTTPクライアントを作成して保持する場合があるからです。失敗したリクエストで実際に使われたインスタンスを調べ、後から別のクライアントを作って最初のものを説明できると決めつけないでください。

診断では、有効なバックエンドとその基盤ライブラリのバージョンを、失敗した段階とともに記録します。サポートされていないリクエストオプション、ネットワークのタイムアウト、プロキシが返したHTTPレスポンスを区別してください。これらの観察はそれぞれ異なる修正につながります。

関連記事