Jupyter上でseleniumもrequestsも同時に認証付きプロキシの設定を変更できるようにしてみた


利点

  • 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)