0.12.1

  Catch socket timeouts and clear dead connection
  https://github.com/httplib2/httplib2/issues/18
  https://github.com/httplib2/httplib2/pull/111

  Officially support Python 3.7 (package metadata)
  https://github.com/httplib2/httplib2/issues/123

0.12.0

  Drop support for Python 3.3

  ca_certs from environment HTTPLIB2_CA_CERTS or certifi
  https://github.com/httplib2/httplib2/pull/117

  PROXY_TYPE_HTTP with non-empty user/pass raised TypeError: bytes required
  https://github.com/httplib2/httplib2/pull/115

  Revert http:443->https workaround
  https://github.com/httplib2/httplib2/issues/112

  eliminate connection pool read race
  https://github.com/httplib2/httplib2/pull/110

  cache: stronger safename
  https://github.com/httplib2/httplib2/pull/101

0.11.3

  No changes, just reupload of 0.11.2 after fixing automatic release conditions in Travis.

0.11.2

  proxy: py3 NameError basestring
  https://github.com/httplib2/httplib2/pull/100

0.11.1

  Fix HTTP(S)ConnectionWithTimeout AttributeError proxy_info
  https://github.com/httplib2/httplib2/pull/97

0.11.0

  Add DigiCert Global Root G2 serial 033af1e6a711a9a0bb2864b11d09fae5
  https://github.com/httplib2/httplib2/pull/91

  python3 proxy support
  https://github.com/httplib2/httplib2/pull/90

  If no_proxy environment value ends with comma then proxy is not used
  https://github.com/httplib2/httplib2/issues/11

  fix UnicodeDecodeError using socks5 proxy
  https://github.com/httplib2/httplib2/pull/64

  Respect NO_PROXY env var in proxy_info_from_url
  https://github.com/httplib2/httplib2/pull/58

  NO_PROXY=bar was matching foobar (suffix without dot delimiter)
  New behavior matches curl/wget:
  - no_proxy=foo.bar will only skip proxy for exact hostname match
  - no_proxy=.wild.card will skip proxy for any.subdomains.wild.card
  https://github.com/httplib2/httplib2/issues/94

  Bugfix for Content-Encoding: deflate
  https://stackoverflow.com/a/22311297

0.10.3

  Fix certificate validation on Python<=2.7.8 without ssl.CertificateError
  https://github.com/httplib2/httplib2/issues/45

0.10.2

  Just a reupload of 0.10.1, which was broken for Python3
  because wheel distribution doesn't play well with our 2/3 split code base.
  https://github.com/httplib2/httplib2/issues/43

0.10.1

  This is the first release by new httplib2 team. See post by Joe
  https://bitworking.org/news/2016/03/an_update_on_httplib2

  Remove VeriSign Class 3 CA from trusted certs
  https://googleonlinesecurity.blogspot.com/2015/12/proactive-measures-in-digital.html

  Add IdenTrust DST Root CA X3
  https://github.com/httplib2/httplib2/pull/26

  Support for specifying the SSL protocol version (Python v2)
  https://github.com/jcgregorio/httplib2/issues/329

  On App Engine use urlfetch's default deadline if None is passed.

  Fix TypeError on AppEngine “__init__() got an unexpected keyword argument 'ssl_version’”
  https://github.com/httplib2/httplib2/pull/12

  Send SNI data for SSL connections on Python 2.7.9+
  Verify the server hostname if certificate validation is enabled
  https://github.com/httplib2/httplib2/pull/13

  Add proxy_headers argument to ProxyInfo constructor
  https://github.com/httplib2/httplib2/pull/21

  Make disable_ssl_certificate_validation work with Python 3.5.
  https://github.com/httplib2/httplib2/pull/15

  Fix socket error handling
  https://github.com/httplib2/httplib2/commit/eb7468561714a5b700d5a3d8fa1a8794de02b9ef
  https://github.com/httplib2/httplib2/commit/e7f6e622047107e701ee70e7ec586717d97b0cbb

0.9.2

  Fixes in this release:

   https://github.com/jcgregorio/httplib2/pull/313

    Fix incorrect ResponseNotReady exceptions, retry on transient errors.

0.9.1

  Fixes in this release:

    https://github.com/jcgregorio/httplib2/pull/296

        There was a problem with headers when a binary string is passed (like
        b'Authorization').

    https://github.com/jcgregorio/httplib2/pull/276

        Default to doing DNS resolution through a proxy server if present.

0.9
  Heartbleed

0.8
  More fixes for the App Engine support.

  Added a new feature that allows you to supply your own provider for the
  CA_CERTS file. Just create a module named ca_certs_locater that has a method
  get() that returns the file location of the CA_CERTS file.

  Lots of clean up of the code formatting to make it more consistent.

0.7.7
   More fixes for App Engine, now less likely to swallow important exceptions.
   Adding proxy_info_from_* methods to Python3. Reviewed in https://codereview.appspot.com/6588078/.
   Added GeoTrust cert
   Make httplib2.Http() instances pickleable. Reviewed in https://codereview.appspot.com/6506074/

   The following issues have been fixed:

   229 python3 httplib2 clobbers multiple headers of same key
   230 Expose meaningful exception for App Engine URLFetch ResponseTooLargeError
   231 Expose App Engine URLFetch DeadlineExceededError for debugging purposes

0.7.6
   Fixes for App Engine 2.7.

0.7.5
   Keys are lowercase in a Response object, regardless of how Response object is constructed.
   Add control so that Authorization: headers aren't forwarded on a 3xx response by default.
   Set the reason correctly when running on App Engine. Patch from Alain Vongsouvanh. Reviewed in http://codereview.appspot.com/6422051/
   Fix proxy socks for SSL connections. Fixes issue #199.
   You can now set httplib2.RETRIES to the number of retries before a request
     is considered to fail It is set to a default of 2 to mimic the traditional
     behavior of httplib2.

   The following issues have been addressed:

     223 HEAD requests fail calling the close() method of ResponseDict instance.
     222 Can't disable cert validation in appengine
     204 Credentials can leak in HTTP redirects
     210 Different API between Python 2 and Python 3 version breaks wsgi_intercept
     214 ValueError on malformated cache entries
     204 Credentials can leak in HTTP redirects


0.7.3
    ProxyInfo objects now can construct themselves from environment
    variables commonly-used in Unix environments. By default, the Http
    class will construct a ProxyInfo instance based on these environment
    variables. To achieve the previous behavior, where environment
    variables are ignored, pass proxy_info=None to Http().

    The following issues have been addressed:

    Issue 159: automatic detection of proxy configuration.
    Issue 179: Allow unicode in proxy hostname.
    Issue 194: Added support for setuptools.
    Fixes for HTTP CONNECT proxies.

0.7.1
    Fix failure to install cacerts.txt for 2.x installs.

0.7.0
    The two major changes in this release are SSL Certificate
    checking and App Engine support. By default the certificates
    of an HTTPS connection are checked, but that can be disabled
    via disable_ssl_certificate_validation. The second change
    is that on App Engine there is a new connection object
    that utilizes the urlfetch capabilities on App Engine, including
    setting timeouts and validating certificates.

    The following issues have been addressed:

    Fixes issue 72. Always lowercase authorization header.
    Fix issue 47. Redirects that become a GET should not have a body.
    Fixes issue 19. Set Content-location on redirected HEAD requests
    Fixes issue 139. Redirect with a GET on 302 regardless of the originating method.
    Fixes issue 138. Handle unicode in headers when writing and retrieving cache entries. Who says headers have to be ASCII!
    Add certificate validation. Work initially started by Christoph Kern.
    Set a version number. Fixes issue # 135.
    Sync to latest version of socks.py
    Add gzip to the user-agent, in case we are making a request to an app engine project: http://code.google.com/appengine/kb/general.html#compression
    Uses a custom httplib shim on App Engine to wrap urlfetch, as opposed
    Add default support for optimistic concurrency on PATCH requests
    Fixes issue 126. IPv6 under various conditions would fail.
    Fixes issue 131. Handle socket.timeout's that occur during send.
    proxy support: degrade gracefully when socket.socket is unavailable


0.6.0

   The following issues have been addressed:

    #51 - Failure to handle server legitimately closing connection before request body is fully sent
    #77 - Duplicated caching test
    #65 - Transform _normalize_headers into a method of Http class
    #45 - Vary header
    #73 - All files in Mercurial are executable
    #81 - Have a useful .hgignore
    #78 - Add release tags to the Mercurial repository
    #67 - HEAD requests cause next request to be retried

   Mostly bug fixes, the big enhancement is the addition of proper Vary: header
   handling. Thanks to Chris Dent for that change.

   The other big change is the build process for distributions so that both python2 and python3
   are included in the same .tar.gz/.zip file.

0.5.0

   Added Python 3 support

   Fixed the following bugs:

      #12 - Cache-Control: only-if-cached incorrectly does request if item not in cache
      #39 - Deprecation warnings in Python 2.6
      #54 - Http.request fails accessing Google account via http proxy
      #56 - Block on response.read() for HEAD requests.
      #57 - Timeout ignore for Python 2.6
      #58 - Fixed parsing of Cache-Control: header to make it more robust

  Also fixed a deprecation warning that appeared between Python 3.0 and 3.1.

0.4.0

   Added support for proxies if the Socksipy module is installed.

   Fixed bug with some HEAD responses having content-length set to
   zero incorrectly.

   Fixed most except's to catch a specific exception.

   Added 'connection_type' parameter to Http.request().

   The default for 'force_exception_to_status_code' was changed to False. Defaulting
   to True was causing quite a bit of confusion.


0.3.0
   Calling Http.request() with a relative URI, as opposed to an absolute URI,
   will now throw a specific exception.

   Http() now has an additional optional parameter for the socket timeout.

   Exceptions can now be forced into responses. That is, instead of
   throwing an exception, a good httlib2.Response object is returned
   that describe the error with an appropriate status code.

   Many improvements to the file cache:

     1.  The names in the cache are now much less
         opaque, which should help with debugging.

     2.  The disk cache is now Apache mod_asis compatible.

     3.  A Content-Location: header is supplied and stored in the
         cache which points to the original requested URI.

   User supplied If-* headers now override httplib2 supplied
   versions.

   IRIs are now fully supported. Note that they MUST be passed in
   as unicode objects.

   Http.add_credentials() now takes an optional domain to restrict
   the credentials to being only used on that domain.

   Added Http.add_certificate() which allows setting
   a key and cert for SSL connections.

   Many other bugs fixed.


0.2.0
   Added support for Google Auth.

   Added experimental support for HMACDigest.

   Added support for a pluggable caching system. Now supports
   the old system of using the file system and now memcached.

   Added httplib2.debuglevel which turns on debugging.

   Change Response._previous to Response.previous.

   Added Http.follow_all_redirects which forces
   httplib2 to follow all redirects, as opposed to
   following only the safe redirects. This makes the
   GData protocol easier to use.

   All known bugs fixed to date.

0.1.1

    Fixed several bugs raised by James Antill:
    1. HEAD didn't get an Accept: header added like GET.
    2. HEAD requests did not use the cache.
    3. GET requests with Range: headers would erroneously return a full cached response.
    4. Subsequent requests to resources that had timed out would raise an exception.
    And one feature request for 'method' to default to GET.

    Xavier Verges Farrero supplied what I needed to make the
    library work with Python 2.3.

    I added distutils based setup.py.

0.1 Rev 86

    Initial Release

