gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

proxy環境下において、Python requests がグローバルIP制限に引っかったときのメモ

結論を先に書くと、「プロキシ用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ファイルまで意識しましょう。

終わり