python UrlService: proxy auth fixed
Ilya committed
Jul 21, 2017 at 16:12 UTC
0df0c6f62477768bff65ee82c0fac89fd37835ea
1 file changed
+26
-22
python.d/python_modules/base.py
+26
-22
@@ -499,35 +499,38 @@ class UrlService(SimpleService):
499
self.url = self.configuration.get('url')
500
self.user = self.configuration.get('user')
501
self.password = self.configuration.get('pass')
502
- self.proxy_url = self.configuration.get('proxy')
502
+ self.proxy_user = self.configuration.get('proxy_user')
503
+ self.proxy_password = self.configuration.get('proxy_pass')
504
+ self.proxy_url = self.configuration.get('proxy_url')
505
self._manager = None
506
505
- def __make_headers(self, user=None, password=None, proxy_url=None):
506
- user = user or self.user
507
- password = password or self.password
508
- proxy_url = proxy_url or self.proxy_url
509
- params = dict(keep_alive=True)
507
+ def __make_headers(self, **header_kw):
508
+ user = header_kw.get('user') or self.user
509
+ password = header_kw.get('pass') or self.password
510
+ proxy_user = header_kw.get('proxy_user') or self.proxy_user
511
+ proxy_password = header_kw.get('proxy_pass') or self.proxy_password
512
+ header_params = dict(keep_alive=True)
513
+ proxy_header_params = dict()
514
if user and password:
511
- key = 'basic_auth' if not proxy_url else 'proxy_basic_auth'
512
- params[key] = '{user}:{password}'.format(user=user, password=password)
513
- return urllib3.make_headers(**params)
514
-
515
- def _build_header(self, **header_kw):
515
+ header_params['basic_auth'] = '{user}:{password}'.format(user=user,
516
+ password=password)
517
+ if proxy_user and proxy_password:
518
+ proxy_header_params['proxy_basic_auth'] = '{user}:{password}'.format(user=proxy_user,
519
+ password=proxy_password)
520
try:
517
- return self.__make_headers(**header_kw)
521
+ return urllib3.make_headers(**header_params), urllib3.make_headers(**proxy_header_params)
522
except TypeError as error:
523
self.error('build_header() error: {error}'.format(error=error))
520
- return None
524
+ return None, None
525
522
- def _build_manager(self, proxy_url=None, header_params=None):
523
- header_params = header_params or dict()
524
- header_params['proxy_url'] = proxy_url or self.proxy_url
525
- header = self._build_header(**header_params)
526
- if not header:
526
+ def _build_manager(self, **header_kw):
527
+ header, proxy_header = self.__make_headers(**header_kw)
528
+ if header is None or proxy_header is None:
529
return None
528
- if header_params['proxy_url']:
530
+ proxy_url = header_kw.get('proxy_url') or self.proxy_url
531
+ if proxy_url:
532
manager = urllib3.ProxyManager
530
- params = dict(proxy_url=header_params['proxy_url'], proxy_headers=header)
533
+ params = dict(proxy_url=proxy_url, headers=header, proxy_headers=proxy_header)
534
else:
535
manager = urllib3.PoolManager
536
params = dict(headers=header)
@@ -545,6 +548,7 @@ class UrlService(SimpleService):
548
try:
549
url = url or self.url
550
manager = manager or self._manager
551
+ # TODO: timeout, retries and method hardcoded..
552
response = manager.request(method='GET',
553
url=url,
554
timeout=1,
@@ -554,8 +558,8 @@ class UrlService(SimpleService):
558
self.error('Url: {url}. Error: {error}'.format(url=url, error=error))
559
return None
560
if response.status == 200:
557
- return response.data.decode() or None
558
- self.error('Url: {url}. Http response status code: {code}'.format(url=url, code=response.status))
561
+ return response.data.decode()
562
+ self.debug('Url: {url}. Http response status code: {code}'.format(url=url, code=response.status))
563
return None
564
565
def check(self):