diff --git a/swiftclient/client.py b/swiftclient/client.py index 544247a..e81d2c6 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -24,6 +24,8 @@ import warnings from distutils.version import StrictVersion from requests.exceptions import RequestException, SSLError +from requests.utils import check_header_validity +from requests._internal_utils import to_native_string from six.moves import http_client from six.moves.urllib.parse import quote as _quote, unquote from six.moves.urllib.parse import urljoin, urlparse, urlunparse @@ -86,10 +88,17 @@ if StrictVersion(requests.__version__) < StrictVersion('2.0.0') \ from requests.structures import CaseInsensitiveDict def prepare_unicode_headers(self, headers): + """Prepares the given HTTP headers.""" + self.headers = CaseInsensitiveDict() if headers: - self.headers = CaseInsensitiveDict(headers) - else: - self.headers = CaseInsensitiveDict() + for header in headers.items(): + # Raise exception on invalid header value. + check_header_validity(header) + name, value = header + try: + self.headers[to_native_string(name)] = value + except UnicodeDecodeError: + self.headers[name] = value requests.models.PreparedRequest.prepare_headers = prepare_unicode_headers logger = logging.getLogger("swiftclient")