diff --git a/rollbar/__init__.py b/rollbar/__init__.py index 57a1d712..57fee8a6 100644 --- a/rollbar/__init__.py +++ b/rollbar/__init__.py @@ -259,6 +259,9 @@ def _get_pylons_request(): 'capture_username': False, 'capture_ip': True, 'log_all_rate_limited_items': True, + 'http_proxy': None, + 'http_proxy_user': None, + 'http_proxy_password': None, } _CURRENT_LAMBDA_CONTEXT = None @@ -1370,10 +1373,13 @@ def _post_api(path, payload_str, access_token=None): url = urljoin(SETTINGS['endpoint'], path) resp = transport.post(url, - data=payload_str, - headers=headers, - timeout=SETTINGS.get('timeout', DEFAULT_TIMEOUT), - verify=SETTINGS.get('verify_https', True)) + data=payload_str, + headers=headers, + timeout=SETTINGS.get('timeout', DEFAULT_TIMEOUT), + verify=SETTINGS.get('verify_https', True), + proxy=SETTINGS.get('http_proxy'), + proxy_user=SETTINGS.get('http_proxy_user'), + proxy_password=SETTINGS.get('http_proxy_password')) return _parse_response(path, SETTINGS['access_token'], payload_str, resp) @@ -1382,7 +1388,12 @@ def _get_api(path, access_token=None, endpoint=None, **params): access_token = access_token or SETTINGS['access_token'] url = urljoin(endpoint or SETTINGS['endpoint'], path) params['access_token'] = access_token - resp = transport.get(url, params=params, verify=SETTINGS.get('verify_https', True)) + resp = transport.get(url, + params=params, + verify=SETTINGS.get('verify_https', True), + proxy=SETTINGS.get('http_proxy'), + proxy_user=SETTINGS.get('http_proxy_user'), + proxy_password=SETTINGS.get('http_proxy_password')) return _parse_response(path, access_token, params, resp, endpoint=endpoint) diff --git a/rollbar/lib/transport.py b/rollbar/lib/transport.py index e19af625..cf722a5a 100644 --- a/rollbar/lib/transport.py +++ b/rollbar/lib/transport.py @@ -12,12 +12,30 @@ def _session(): return _local.session +def _get_proxy_cfg(kw): + proxy = kw.pop('proxy', None) + proxy_user = kw.pop('proxy_user', None) + proxy_password = kw.pop('proxy_password', None) + if proxy and proxy_user and proxy_password: + return { + 'http': 'http://{}:{}@{}'.format(proxy_user, proxy_password, proxy), + 'https': 'http://{}:{}@{}'.format(proxy_user, proxy_password, proxy), + } + elif proxy: + return { + 'http': 'http://{}'.format(proxy), + 'https': 'http://{}'.format(proxy), + } + + def post(*args, **kw): - return _session().post(*args, **kw) + proxies = _get_proxy_cfg(kw) + return _session().post(*args, proxies=proxies, **kw) def get(*args, **kw): - return _session().get(*args, **kw) + proxies = _get_proxy_cfg(kw) + return _session().get(*args, proxies=proxies, **kw) __all__ = ['post', 'get']