diff --git a/pydruid/client.py b/pydruid/client.py index 05941904..0694679a 100755 --- a/pydruid/client.py +++ b/pydruid/client.py @@ -17,6 +17,7 @@ from __future__ import absolute_import import json +import ssl import re from six.moves import urllib @@ -36,11 +37,15 @@ def __init__(self, url, endpoint): self.query_builder = QueryBuilder() self.username = None self.password = None + self.ignore_certificate_errors = False def set_basic_auth_credentials(self, username, password): self.username = username self.password = password + def set_ignore_certificate_errors(self, value=True): + self.ignore_certificate_errors = value + def _prepare_url_headers_and_body(self, query): querystr = json.dumps(query.query_dict).encode('utf-8') if self.url.endswith('/'): @@ -481,11 +486,18 @@ class PyDruid(BaseDruidClient): def __init__(self, url, endpoint): super(PyDruid, self).__init__(url, endpoint) + def ssl_context(self): + ctx = ssl.create_default_context() + if self.ignore_certificate_errors: + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + return ctx + def _post(self, query): try: headers, querystr, url = self._prepare_url_headers_and_body(query) req = urllib.request.Request(url, querystr, headers) - res = urllib.request.urlopen(req) + res = urllib.request.urlopen(req, context=self.ssl_context()) data = res.read().decode("utf-8") res.close() except urllib.error.HTTPError as e: