# Contributions to the urllib3 project

## Creator & Maintainer

* Andrey Petrov <andrey.petrov@shazow.net>


## Contributors

In chronological order:

* victor.vde <http://code.google.com/u/victor.vde/>
  * HTTPS patch (which inspired HTTPSConnectionPool)

* erikcederstrand <http://code.google.com/u/erikcederstrand/>
  * NTLM-authenticated HTTPSConnectionPool
  * Basic-authenticated HTTPSConnectionPool (merged into make_headers)

* niphlod <niphlod@gmail.com>
  * Client-verified SSL certificates for HTTPSConnectionPool
  * Response gzip and deflate encoding support
  * Better unicode support for filepost using StringIO buffers

* btoconnor <brian@btoconnor.net>
  * Non-multipart encoding for POST requests

* p.dobrogost <http://code.google.com/u/@WBRSRlBZDhBFXQB6/>
  * Code review, PEP8 compliance, benchmark fix

* kennethreitz <me@kennethreitz.com>
  * Bugfixes, suggestions, Requests integration

* georgemarshall <https://github.com/georgemarshall>
  * Bugfixes, Improvements and Test coverage

* Thomas Kluyver <thomas@kluyver.me.uk>
  * Python 3 support

* brandon-rhodes <http://rhodesmill.org/brandon>
  * Design review, bugfixes, test coverage.

* studer <theo.studer@gmail.com>
  * IPv6 url support and test coverage

* Shivaram Lingamneni <slingamn@cs.stanford.edu>
  * Support for explicitly closing pooled connections

* hartator <hartator@gmail.com>
  * Corrected multipart behavior for params

* Thomas Weißschuh <thomas@t-8ch.de>
  * Support for TLS SNI
  * API unification of ssl_version/cert_reqs
  * SSL fingerprint and alternative hostname verification
  * Bugfixes in testsuite

* Sune Kirkeby <mig@ibofobi.dk>
  * Optional SNI-support for Python 2 via PyOpenSSL.

* Marc Schlaich <marc.schlaich@gmail.com>
  * Various bugfixes and test improvements.

* Bryce Boe <bbzbryce@gmail.com>
  * Correct six.moves conflict
  * Fixed pickle support of some exceptions

* Boris Figovsky <boris.figovsky@ravellosystems.com>
  * Allowed to skip SSL hostname verification

* Cory Benfield <https://lukasa.co.uk/about/>
  * Stream method for Response objects.
  * Return native strings in header values.
  * Generate 'Host' header when using proxies.

* Jason Robinson <jaywink@basshero.org>
  * Add missing WrappedSocket.fileno method in PyOpenSSL

* Audrius Butkevicius <audrius.butkevicius@elastichosts.com>
  * Fixed a race condition

* Stanislav Vitkovskiy <stas.vitkovsky@gmail.com>
  * Added HTTPS (CONNECT) proxy support

* Stephen Holsapple <sholsapp@gmail.com>
  * Added abstraction for granular control of request fields

* Martin von Gagern <Martin.vGagern@gmx.net>
  * Support for non-ASCII header parameters

* Kevin Burke <kev@inburke.com> and Pavel Kirichenko <juanych@yandex-team.ru>
  * Support for separate connect and request timeouts

* Peter Waller <p@pwaller.net>
  * HTTPResponse.tell() for determining amount received over the wire

* Nipunn Koorapati <nipunn1313@gmail.com>
  * Ignore default ports when comparing hosts for equality

* Danilo @dbrgn <https://dbrgn.ch/>
  * Disabled TLS compression by default on Python 3.2+
  * Disabled TLS compression in pyopenssl contrib module
  * Configurable cipher suites in pyopenssl contrib module

* Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
  * Account retries on proxy errors

* Nicolas Delaby <nicolas.delaby@ezeep.com>
  * Use the platform-specific CA certificate locations

* Josh Schneier <https://github.com/jschneier>
  * HTTPHeaderDict and associated tests and docs
  * Bugfixes, docs, test coverage

* Tahia Khan <http://tahia.tk/>
  * Added Timeout examples in docs

* Arthur Grunseid <https://grunseid.com>
  * source_address support and tests (with https://github.com/bui)

* Ian Cordasco <graffatcolmingov@gmail.com>
  * PEP8 Compliance and Linting
  * Add ability to pass socket options to an HTTP Connection

* Erik Tollerud <erik.tollerud@gmail.com>
  * Support for standard library io module.

* Krishna Prasad <kprasad.iitd@gmail.com>
  * Google App Engine documentation

* Aaron Meurer <asmeurer@gmail.com>
  * Added Url.url, which unparses a Url

* Evgeny Kapun <abacabadabacaba@gmail.com>
  * Bugfixes

* Benjamen Meyer <bm_witness@yahoo.com>
  * Security Warning Documentation update for proper capture

* Shivan Sornarajah <github@sornars.com>
  * Support for using ConnectionPool and PoolManager as context managers.

* Alex Gaynor <alex.gaynor@gmail.com>
  * Updates to the default SSL configuration

* Tomas Tomecek <ttomecek@redhat.com>
  * Implemented generator for getting chunks from chunked responses.

* tlynn <https://github.com/tlynn>
  * Respect the warning preferences at import.

* David D. Riddle <ddriddle@illinois.edu>
  * IPv6 bugfixes in testsuite

* Thea Flowers <magicalgirl@google.com>
  * App Engine environment tests.
  * Documentation re-write.

* John Krauss <https://github.com/talos>
  * Clues to debugging problems with `cryptography` dependency in docs

* Disassem <https://github.com/Disassem>
  * Fix pool-default headers not applying for url-encoded requests like GET.

* James Atherfold <jlatherfold@hotmail.com>
  * Bugfixes relating to cleanup of connections during errors.

* Christian Pedersen <https://github.com/chripede>
  * IPv6 HTTPS proxy bugfix

* Jordan Moldow <https://github.com/jmoldow>
  * Fix low-level exceptions leaking from ``HTTPResponse.stream()``.
  * Bugfix for ``ConnectionPool.urlopen(release_conn=False)``.
  * Creation of ``HTTPConnectionPool.ResponseCls``.

* Predrag Gruevski <https://github.com/obi1kenobi>
  * Made cert digest comparison use a constant-time algorithm.

* Adam Talsma <https://github.com/a-tal>
  * Bugfix to ca_cert file paths.

* Evan Meagher <https://evanmeagher.net>
  * Bugfix related to `memoryview` usage in PyOpenSSL adapter

* John Vandenberg <jayvdb@gmail.com>
  * Python 2.6 fixes; pyflakes and pep8 compliance

* Andy Caldwell <andy.m.caldwell@googlemail.com>
  * Bugfix related to reusing connections in indeterminate states.

* Ville Skyttä <ville.skytta@iki.fi>
  * Logging efficiency improvements, spelling fixes, Travis config.

* Shige Takeda <smtakeda@gmail.com>
  * Started Recipes documentation and added a recipe about handling concatenated gzip data in HTTP response

* Jess Shapiro <jesse@jesseshapiro.net>
  * Various character-encoding fixes/tweaks
  * Disabling IPv6 DNS when IPv6 connections not supported

* David Foster <http://dafoster.net/>
  * Ensure order of request and response headers are preserved.

* Jeremy Cline <jeremy@jcline.org>
  * Added connection pool keys by scheme

* Aviv Palivoda <palaviv@gmail.com>
  * History list to Retry object.
  * HTTPResponse contains the last Retry object.

* Nate Prewitt <nate.prewitt@gmail.com>
  * Ensure timeouts are not booleans and greater than zero.
  * Fixed infinite loop in ``stream`` when amt=None.
  * Added length_remaining to determine remaining data to be read.
  * Added enforce_content_length to raise exception when incorrect content-length received.

* Seth Michael Larson <sethmichaellarson@protonmail.com>
  * Created selectors backport that supports PEP 475.

* Alexandre Dias <alex.dias@smarkets.com>
  * Don't retry on timeout if method not in whitelist

* Moinuddin Quadri <moin18@gmail.com>
  * Lazily load idna package

* Tom White <s6yg1ez3@mail2tor.com>
  * Made SOCKS handler differentiate socks5h from socks5 and socks4a from socks4.

* Tim Burke <tim.burke@gmail.com>
  * Stop buffering entire deflate-encoded responses.

* Tuukka Mustonen <tuukka.mustonen@gmail.com>
  * Add counter for status_forcelist retries.

* Erik Rose <erik@mozilla.com>
  * Bugfix to pyopenssl vendoring

* Wolfgang Richter <wolfgang.richter@gmail.com>
  * Bugfix related to loading full certificate chains with PyOpenSSL backend.

* Mike Miller <github@mikeage.net>
  * Logging improvements to include the HTTP(S) port when opening a new connection

* Ioannis Tziakos <mail@itziakos.gr>
  * Fix ``util.selectors._fileobj_to_fd`` to accept ``long``.
  * Update appveyor tox setup to use the 64bit python.

* Akamai (through Jess Shapiro) <jshapiro@akamai.com>
  * Ongoing maintenance; 2017-2018

* Dominique Leuenberger <dimstar@opensuse.org>
  * Minor fixes in the test suite

* Will Bond <will@wbond.net>
  * Add Python 2.6 support to ``contrib.securetransport``

* Aleksei Alekseev <alekseev.yeskela@gmail.com>
  * using auth info for socks proxy

* Chris Wilcox <git@crwilcox.com>
  * Improve contribution guide
  * Add ``HTTPResponse.geturl`` method to provide ``urllib2.urlopen().geturl()`` behavior

* Bruce Merry <https://www.brucemerry.org.za>
  * Fix leaking exceptions when system calls are interrupted with zero timeout

* Hugo van Kemenade <https://github.com/hugovk>
  * Drop support for EOL Python 2.6

* Tim Bell <https://github.com/timb07>
  * Bugfix for responses with Content-Type: message/* logging warnings

* Justin Bramley <https://github.com/jbramleycl>
  * Add ability to handle multiple Content-Encodings

* Katsuhiko YOSHIDA <https://github.com/kyoshidajp>
  * Remove Authorization header regardless of case when redirecting to cross-site

* James Meickle <https://permadeath.com/>
  * Improve handling of Retry-After header

* Chris Jerdonek <chris.jerdonek@gmail.com>
  * Remove a spurious TypeError from the exception chain inside
    HTTPConnectionPool._make_request(), also for BaseExceptions.

* [Your name or handle] <[email or website]>
  * [Brief summary of your changes]
