プロキシ経由で Requests のレスポンスが文字化けする?Brotli 対応を確認する
コピーした Accept-Encoding:br は、ホスト型 Requests 環境のデコーダ対応を上回ることがあります。
ノート PC とホスト側のプロセスを、2 つの異なる層で比較します:
| 層 | 確認事項 |
|---|---|
| Content-Encoding | クライアントは返された gzip/deflate/Brotli のバイト列を伸張できるか? |
| Charset | 伸張後のバイト列はどうテキストになるか? |
Requests は通常 gzip/deflate を処理しますが、Brotli には対応済みライブラリのインストールが必要です。手動でコピーした Accept-Encoding は、この環境がデコードできないのに br を通知してしまうことがあります。UTF-8 のテキスト選択は Brotli を伸張しません。
ネゴシエーションを意図的に制限する場合:
response = session.get(
url,
proxies={"https": "http://proxy.example:8080"},
headers={"Accept-Encoding": "gzip, deflate"},
timeout=30,
)
response.raise_for_status()既存の Session、HTTPS URL、必要なヘッダーと認証を使ってください。送信時の Accept-Encoding、受信時の Content-Encoding、両方のマシンでのパッケージ対応を比較します。変換を行う中間装置が古いメタデータを返すこともあります。公開ページでの別途の比較では、公共の仲介が許可されている場合に HTTP プロキシ一覧 を代理 URL の取得に使えますが、継承したプロキシ資格情報、コピーしたアカウントヘッダー、非公開の本文データを持ち込まないでください。
それ以外は通常のクライアント交渉を優先してください。Requests の便利な content/text インターフェースは対応する符号化を伸張するので、ヘッダーに名前があるという理由だけで出力を再度伸張しないでください。