利点
- OSの環境変数にProxyの設定を行う事で、Selenium,Requestsなど複数のパッケージに対して、個々にProxy設定せずに済むようになります。
- 下記実装にすることで、環境変数への設定はこのコードを実行しているブックのみで有効になるので、他への影響が少ない
- ID/パスワードをコードに固定で設定せず毎回入力するため、ソースが漏れてもセキュリティ上の影響が少ない
ソースコード
import os
import getpass
class PROXY:
# プロキシー一覧
proxies = {
"office":{社内で利用するプロキシーサーバーのアドレス:ポート},
"mobile":{社外で利用するプロキシーサーバーのアドレス:ポート},
}
def __init__(self,prxy=None):
self.conf(prxy=prxy)
def conf(self,prxy=""):
if prxy not in [None,"office","mobile"]:
prxy = input("Proxy(office|mobile|none)")
if prxy in ["office","mobile"]:
name = input("ID:")
password = getpass.getpass("Password")
self.set_proxy(name,password,prxy=prxy)
else:
prxy = None
self.set_proxy(prxy=prxy)
#プロキシのID,パスワードと接続元から環境変数にProxyを設定
def set_proxy(self,uid=None,pwd=None,prxy=None):
#プロキシを削除
if prxy == None:
os.environ.pop('HTTP_PROXY', None)
os.environ.pop('HTTPS_PROXY', None)
print("clear Proxy")
#プロキシを設定
elif prxy in self.proxies.keys():
prx = self.proxies[prxy]
os.environ['HTTP_PROXY']="http://{}:{}@{}".format(uid,pwd,prx)
os.environ['HTTPS_PROXY']="http://{}:{}@{}".format(uid,pwd,prx)
print("Set {} as Proxy".format(prx))
#プロキシを削除
else:
os.environ.pop('HTTP_PROXY', None)
os.environ.pop('HTTPS_PROXY', None)
print("clear Proxy")
#プロキシのID,パスワードと接続元から環境変数にProxyを設定
def check_proxy(self):
print('HTTP_PROXY:{}'.format(os.environ.get('HTTP_PROXY', None)))
print('HTTPS_PROXY:{}'.format(os.environ.get('HTTPS_PROXY', None)))
利用方法
下記を記載する事で、prxy=None以外はID,パスワードの入力を求められる。
正しいID,パスワードを入力する事で、当該ブックにのみ有効なプロキシ設定が環境変数に設定される。
# OfficeのProxy利用時
_ = PROXY(prxy="office")
# mobileのProxy利用時
_ = PROXY(prxy="mobile")
# Proxyを使わないとき
_ = PROXY(prxy=None)