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

