結論を先に書くと、「プロキシ用pacファイルまでちゃんと意識してコード書いてる?」
問題
プロキシ環境化において、Python requestsパッケージを用いて、APIを叩きたい
前提として、
- API、管理画面はグローバルIP制限を施している
- APIからレスポンスは返ってくるが、「許可されていないIPです」と出る
- ブラウザ側から管理画面には普通にアクセスできる(=インフラ的な設定・申請は問題ないはず)
- IP制限を外すと、PythonからAPIは叩ける
コード例
import requests response = requests.get('APIのURL', proxies={ 'http' : 'http://example.com' 'https' : 'http://example.com' })
GIP制限外すとつながるので、コードにも問題はなさそう。
原因
OS側でpacファイルが指定されていた。 そのpacファイル内にて、アクセス先のサイトに応じて 使用するプロキシサーバーを振り分けていることが判明。
私のコードでは、通常利用するプロキシサーバーを指定しており、 そのプロキシサーバーのIPが可変だったため、 グローバルIPの制限にひっかかっていた。
対策
方法1 PACファイル内部を見て、アクセスしようとしているAPIのURLが どのプロキシサーバーを使うかを確認し、そのプロキシサーバーを記載する
方法2 pypacというパッケージがあるので、 プロキシサーバーではなく、 PACファイルを指定→pacファイル側でプロキシサーバーを指定するようにする
使い方は下記参照
PyPAC: Proxy auto-config for Python — PyPAC 0.16.3 documentation
PACファイル確認方法の一例
win11の例
コントロールパネル→インターネットオプションとかからでも確認できると思いますよ。
総括
プロキシと言われたときには、プロキシサーバーだけではなく、 その手前の.pacファイルまで意識しましょう。
終わり