* Adding GZip support to urllib3
* Adding compression documentation and example
* Convert to lowercase for consistency
* Moving header manipulation to __init__()
* Validating headers for compression
* Moving body compression out of the headers block
* Don't compress if there is no body
* Infer true
* Use original SSL process and add SSLContext
Not going to deprecate and replace with SSLContext.
But instead give option for using SSLContext next to the original way of
handling SSL.
Bug with OSX made breaking changes to the way certifi was being imported
and used.
Unable to reproduce with Linux.
Found improper logic. Fixed now.
Also changing removing the flag for checking `verify_certs` as
it is `True` by default. Don't want to make users flag that as
`False` just to make things work.
A connection to an SSL instance should be:
es = Elasticsearch("https://host:port", http_auth=(user,pass))
* If using Elastic Cloud or some other publicly recognized certificate
that certifi can recognize.
Also don't want to break backwards compat. So when chcking for depreicated values ignore
the check on verify_certs. Since it's True. the verify certs will be default true
in the ssl_context. And can be turned off in the SSL context when using it.
Fixes non UTF-8 surrogateescapes
Surrogate escapes in Unicode (non UTF-8 encoding) will be properly escaped with backslashes when encountered, versus breaking the transport layer.
Fixes#611
Before turning them into an authentication header, the user or password
supplied in hosts must be URL decoded.
The RFC https://tools.ietf.org/html/rfc3986 describes userinfo like:
userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
and python documentation about urlparse says:
The components are not broken up in smaller parts (for example, the
network location is a single string), and % escapes are not expanded.
It is the caller job to unquote them before using them.
For instance, a character like "]" cannot be supplied in a host or
urllib will incorrectly interpret it using ipv6 syntax.
Fix#568