0.17.2

  python3 + debug + IPv6 disabled: https raised
  "IndexError: Replacement index 1 out of range for positional args tuple"
  https://github.com/httplib2/httplib2/issues/161

0.17.1

  python3: no_proxy was not checked with https
  https://github.com/httplib2/httplib2/issues/160

0.17.0

  feature: Http().redirect_codes set, works after follow(_all)_redirects check
  This allows one line workaround for old gcloud library that uses 308
  response without redirect semantics.
  https://github.com/httplib2/httplib2/issues/156

0.16.0

  IMPORTANT cache invalidation change, fix 307 keep method, add 308 Redirects
  https://github.com/httplib2/httplib2/issues/151

  proxy: username/password as str compatible with pysocks
  https://github.com/httplib2/httplib2/issues/154

0.15.0

  python2: regression in connect() error handling
  https://github.com/httplib2/httplib2/pull/150

  add support for password protected certificate files
  https://github.com/httplib2/httplib2/pull/143

  feature: Http.close() to clean persistent connections and sensitive data
  https://github.com/httplib2/httplib2/pull/149

0.14.0

  Python3: PROXY_TYPE_SOCKS5 with str user/pass raised TypeError
  https://github.com/httplib2/httplib2/pull/145

0.13.1

  Python3: Use no_proxy
  https://github.com/httplib2/httplib2/pull/140

0.13.0

  Allow setting TLS max/min versions
  https://github.com/httplib2/httplib2/pull/138

0.12.3

  No changes to library. Distribute py3 wheels.

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

