Box Python SDK 如何設置 proxy
方法0 透過環境環境變數設置
只需要從 python 環境中設置環境變數即可
import os
os.environ['http_proxy'] = 'http://Enterprise.co.jp:8080'
os.environ['https_proxy'] = 'https://Enterprise.co.jp:8080'
我也有嘗試著從環境變數設置過無效,下面舊文是我掙扎的痕跡,可能是我這邊環境問題。
但總之最後測試的結果是,BOXSDK不用改直接追加這幾行在開頭就行了。
如果你從這邊設置無效順著我底下舊文直接改SDK絕對不受環境影響的。
下面是舊文
截止制目前我覺得很扯的是,從源代碼觀察似乎不存在任何參數可以設置 Proxy ,官方可能就沒考慮到這事情
或許有什麼隱藏方法可以設置也說不定,只是我沒能從官方說明上找到,只好自己從原始代碼中下手了
最後被我找到是在 default_network.py
這份檔案中的 Session 負責的,由於看不出來怎麼設置他只好強行修改了
box-python-sdk/boxsdk/network/default_network.py#L26 (github.com)
方法1 動態修改 Boxsdk 類
修改的方式就直接硬上了,在你的程式中使用以下代碼動態修改函式庫
(不是直接修改函式庫代碼別搞錯)
# EnterpriseNetwork (Proxy Setting)
import requests
from boxsdk.network.default_network import DefaultNetwork
from logging import getLogger
def EnterpriseNetwork(self):
super(DefaultNetwork, self).__init__()
self._session = requests.Session()
self._session.proxies.update({
'http' : 'http://Enterprise.co.jp:8080',
'https': 'https://Enterprise.co.jp:8080'
})
self._logger = getLogger(__name__)
DefaultNetwork.__init__ = EnterpriseNetwork
這樣就能做到動態修改了,覺得很醜但至少應該沒啥副作用,奏合著用吧。
方法2 修改 Boxsdk 類
from os import getenv
class DefaultNetwork(Network):
def __init__(self):
super().__init__()
self._session = requests.Session()
proxies = {}
if getenv('http_proxy'):
proxies['http'] = getenv('http_proxy')
if getenv('https_proxy'):
proxies['https'] = getenv('https_proxy')
if proxies:
self._session.proxies.update(proxies)
self._logger = getLogger(__name__)
這個雖然修改了但是是比較折衷的辦法,從環境變數中獲取如果存在的話就加入。
這樣只需要在主程式中動態的定義環境變數,或乾脆定義系統環境變數就可以了。
import os
os.environ['http_proxy'] = 'http://Enterprise.co.jp:8080'
os.environ['https_proxy'] = 'https://Enterprise.co.jp:8080'
最後還有一個發想是,也可以在方法1中使用方法2,把兩個合成起來。
參考
這篇好像疑似有方法,未測試
Box APIとの通信をCharles Proxyを通して覗き見る方法 #BOX - Qiita
沒有留言:
張貼留言