@cryptotaxi247 / netdata-1 / commits / 0df0c6f62

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