- Improved SSL-related code.
cert_req
now optionally takes a string like "REQUIRED" or "NONE". Same withssl_version
takes strings like "SSLv23" The string values reflect the suffix of the respective constant variable. (Issue #130) - Vendored
socksipy
now based on Anorov's fork which handles unexpectedly closed proxy connections and larger read buffers. (Issue #135) - Ensure the connection is closed if no data is received, fixes connection leak on some platforms. (Issue #133)
- Added SNI support for SSL/TLS connections on Py32+. (Issue #89)
- Tests fixed to be compatible with Py26 again. (Issue #125)
- Added ability to choose SSL version by passing an
ssl.PROTOCOL_*
constant to thessl_version
parameter ofHTTPSConnectionPool
. (Issue #109) - Allow an explicit content type to be specified when encoding file fields. (Issue #126)
- Exceptions are now pickleable, with tests. (Issue #101)
- Fixed default headers not getting passed in some cases. (Issue #99)
- Treat "content-encoding" header value as case-insensitive, per RFC 2616 Section 3.5. (Issue #110)
- "Connection Refused" SocketErrors will get retried rather than raised. (Issue #92)
- Updated vendored
six
, no longer overrides the globalsix
module namespace. (Issue #113) urllib3.exceptions.MaxRetryError
contains areason
property holding the exception that prompted the final retry. Ifreason is None
then it was due to a redirect. (Issue #92, #114)- Don't assume
Content-Type: text/plain
for multi-part encoding parameters that are not files. (Issue #111) - Pass strict param down to
httplib.HTTPConnection
. (Issue #122)
- Added
urllib3.add_stderr_logger()
for quickly enabling STDERR debug logging in urllib3. - Native full URL parsing (including auth, path, query, fragment) available in
urllib3.util.parse_url(url)
. - Built-in redirect will switch method to 'GET' if status code is 303. (Issue #11)
urllib3.PoolManager
strips the scheme and host before sending the request uri. (Issue #8)- New
urllib3.exceptions.DecodeError
exception for when automatic decoding, based on the Content-Type header, fails. - Fixed bug with pool depletion and leaking connections (Issue #76). Added
explicit connection closing on pool eviction. Added
urllib3.PoolManager.clear()
. - 99% -> 100% unit test coverage.
- Minor AppEngine-related fixes.
- Switched from
mimetools.choose_boundary
touuid.uuid4()
. - Improved url parsing. (Issue #73)
- IPv6 url support. (Issue #72)
- Removed pre-1.0 deprecated API.
- Refactored helpers into a
urllib3.util
submodule. - Fixed multipart encoding to support list-of-tuples for keys with multiple values. (Issue #48)
- Fixed multiple Set-Cookie headers in response not getting merged properly in Python 3. (Issue #53)
- AppEngine support with Py27. (Issue #61)
- Minor
encode_multipart_formdata
fixes related to Python 3 strings vs bytes.
- Fixed packaging bug of not shipping
test-requirements.txt
. (Issue #47)
- Fixed another bug related to when
ssl
module is not available. (Issue #41) - Location parsing errors now raise
urllib3.exceptions.LocationParseError
which inherits fromValueError
.
- Added Python 3 support (tested on 3.2.2)
- Dropped Python 2.5 support (tested on 2.6.7, 2.7.2)
- Use
select.poll
instead ofselect.select
for platforms that support it. - Use
Queue.LifoQueue
instead ofQueue.Queue
for more aggressive connection reusing. Configurable by overridingConnectionPool.QueueCls
. - Fixed
ImportError
during install whenssl
module is not available. (Issue #41) - Fixed
PoolManager
redirects between schemes (such as HTTP -> HTTPS) not completing properly. (Issue #28, uncovered by Issue #10 in v1.1) - Ported
dummyserver
to usetornado
instead ofwebob
+eventlet
. Removed extraneous unsupported dummyserver testing backends. Added socket-level tests. - More tests. Achievement Unlocked: 99% Coverage.
- Refactored
dummyserver
to its own root namespace module (used for testing). - Added hostname verification for
VerifiedHTTPSConnection
by vendoring in Py32'sssl_match_hostname
. (Issue #25) - Fixed cross-host HTTP redirects when using
PoolManager
. (Issue #10) - Fixed
decode_content
being ignored when set throughurlopen
. (Issue #27) - Fixed timeout-related bugs. (Issues #17, #23)
- Fixed typo in
VerifiedHTTPSConnection
which would only present as a bug if you're using the object manually. (Thanks pyos) - Made RecentlyUsedContainer (and consequently PoolManager) more thread-safe by wrapping the access log in a mutex. (Thanks @christer)
- Made RecentlyUsedContainer more dict-like (corrected
__delitem__
and__getitem__
behaviour), with tests. Shouldn't affect core urllib3 code.
- Fixed a bug where the same connection would get returned into the pool twice, causing extraneous "HttpConnectionPool is full" log warnings.
- Added
PoolManager
with LRU expiration of connections (tested and documented). - Added
ProxyManager
(needs tests, docs, and confirmation that it works with HTTPS proxies). - Added optional partial-read support for responses when
preload_content=False
. You can now make requests and just read the headers without loading the content. - Made response decoding optional (default on, same as before).
- Added optional explicit boundary string for
encode_multipart_formdata
. - Convenience request methods are now inherited from
RequestMethods
. Old helpers likeget_url
andpost_url
should be abandoned in favour of the newrequest(method, url, ...)
. - Refactored code to be even more decoupled, reusable, and extendable.
- License header added to
.py
files. - Embiggened the documentation: Lots of Sphinx-friendly docstrings in the code
and docs in
docs/
and on urllib3.readthedocs.org. - Embettered all the things!
- Started writing this file.
- Minor bug fixes, code cleanup.
- Better unicode support.
- Added
VerifiedHTTPSConnection
. - Added
NTLMConnectionPool
in contrib. - Minor improvements.
- Added
assert_host_name
optional parameter. Now compatible with proxies.
- Added HTTPS support.
- Minor bug fixes.
- Refactored, broken backwards compatibility with 0.2.
- API to be treated as stable from this version forward.
- Added unit tests.
- Bug fixes.
- First release.