1Metadata-Version: 2.1
2Name: urllib3
3Version: 1.26.7
4Summary: HTTP library with thread-safe connection pooling, file post, and more.
5Home-page: https://urllib3.readthedocs.io/
6Author: Andrey Petrov
7Author-email: andrey.petrov@shazow.net
8License: MIT
9Project-URL: Documentation, https://urllib3.readthedocs.io/
10Project-URL: Code, https://github.com/urllib3/urllib3
11Project-URL: Issue tracker, https://github.com/urllib3/urllib3/issues
12Keywords: urllib httplib threadsafe filepost http https ssl pooling
13Platform: UNKNOWN
14Classifier: Environment :: Web Environment
15Classifier: Intended Audience :: Developers
16Classifier: License :: OSI Approved :: MIT License
17Classifier: Operating System :: OS Independent
18Classifier: Programming Language :: Python
19Classifier: Programming Language :: Python :: 2
20Classifier: Programming Language :: Python :: 2.7
21Classifier: Programming Language :: Python :: 3
22Classifier: Programming Language :: Python :: 3.5
23Classifier: Programming Language :: Python :: 3.6
24Classifier: Programming Language :: Python :: 3.7
25Classifier: Programming Language :: Python :: 3.8
26Classifier: Programming Language :: Python :: 3.9
27Classifier: Programming Language :: Python :: 3.10
28Classifier: Programming Language :: Python :: Implementation :: CPython
29Classifier: Programming Language :: Python :: Implementation :: PyPy
30Classifier: Topic :: Internet :: WWW/HTTP
31Classifier: Topic :: Software Development :: Libraries
32Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
33Description-Content-Type: text/x-rst
34Provides-Extra: brotli
35Provides-Extra: secure
36Provides-Extra: socks
37License-File: LICENSE.txt
38
39
40urllib3 is a powerful, *user-friendly* HTTP client for Python. Much of the
41Python ecosystem already uses urllib3 and you should too.
42urllib3 brings many critical features that are missing from the Python
43standard libraries:
44
45- Thread safety.
46- Connection pooling.
47- Client-side SSL/TLS verification.
48- File uploads with multipart encoding.
49- Helpers for retrying requests and dealing with HTTP redirects.
50- Support for gzip, deflate, and brotli encoding.
51- Proxy support for HTTP and SOCKS.
52- 100% test coverage.
53
54urllib3 is powerful and easy to use:
55
56.. code-block:: python
57
58    >>> import urllib3
59    >>> http = urllib3.PoolManager()
60    >>> r = http.request('GET', 'http://httpbin.org/robots.txt')
61    >>> r.status
62    200
63    >>> r.data
64    'User-agent: *\nDisallow: /deny\n'
65
66
67Installing
68----------
69
70urllib3 can be installed with `pip <https://pip.pypa.io>`_::
71
72    $ python -m pip install urllib3
73
74Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_::
75
76    $ git clone git://github.com/urllib3/urllib3.git
77    $ python setup.py install
78
79
80Documentation
81-------------
82
83urllib3 has usage and reference documentation at `urllib3.readthedocs.io <https://urllib3.readthedocs.io>`_.
84
85
86Contributing
87------------
88
89urllib3 happily accepts contributions. Please see our
90`contributing documentation <https://urllib3.readthedocs.io/en/latest/contributing.html>`_
91for some tips on getting started.
92
93
94Security Disclosures
95--------------------
96
97To report a security vulnerability, please use the
98`Tidelift security contact <https://tidelift.com/security>`_.
99Tidelift will coordinate the fix and disclosure with maintainers.
100
101
102Maintainers
103-----------
104
105- `@sethmlarson <https://github.com/sethmlarson>`__ (Seth M. Larson)
106- `@pquentin <https://github.com/pquentin>`__ (Quentin Pradet)
107- `@theacodes <https://github.com/theacodes>`__ (Thea Flowers)
108- `@haikuginger <https://github.com/haikuginger>`__ (Jess Shapiro)
109- `@lukasa <https://github.com/lukasa>`__ (Cory Benfield)
110- `@sigmavirus24 <https://github.com/sigmavirus24>`__ (Ian Stapleton Cordasco)
111- `@shazow <https://github.com/shazow>`__ (Andrey Petrov)
112
113��
114
115
116Sponsorship
117-----------
118
119If your company benefits from this library, please consider `sponsoring its
120development <https://urllib3.readthedocs.io/en/latest/sponsors.html>`_.
121
122
123For Enterprise
124--------------
125
126.. |tideliftlogo| image:: https://nedbatchelder.com/pix/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png
127   :width: 75
128   :alt: Tidelift
129
130.. list-table::
131   :widths: 10 100
132
133   * - |tideliftlogo|
134     - Professional support for urllib3 is available as part of the `Tidelift
135       Subscription`_.  Tidelift gives software development teams a single source for
136       purchasing and maintaining their software, with professional grade assurances
137       from the experts who know it best, while seamlessly integrating with existing
138       tools.
139
140.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-urllib3?utm_source=pypi-urllib3&utm_medium=referral&utm_campaign=readme
141
142
143Changes
144=======
145
1461.26.7 (2021-09-22)
147-------------------
148* Fixed a bug with HTTPS hostname verification involving IP addresses and lack
149  of SNI. (Issue #2400)
150* Fixed a bug where IPv6 braces weren't stripped during certificate hostname
151  matching. (Issue #2240)
152
153
1541.26.6 (2021-06-25)
155-------------------
156
157* Deprecated the ``urllib3.contrib.ntlmpool`` module. urllib3 is not able to support
158  it properly due to `reasons listed in this issue <https://github.com/urllib3/urllib3/issues/2282>`_.
159  If you are a user of this module please leave a comment.
160* Changed ``HTTPConnection.request_chunked()`` to not erroneously emit multiple
161  ``Transfer-Encoding`` headers in the case that one is already specified.
162* Fixed typo in deprecation message to recommend ``Retry.DEFAULT_ALLOWED_METHODS``.
163
164
1651.26.5 (2021-05-26)
166-------------------
167
168* Fixed deprecation warnings emitted in Python 3.10.
169* Updated vendored ``six`` library to 1.16.0.
170* Improved performance of URL parser when splitting
171  the authority component.
172
173
1741.26.4 (2021-03-15)
175-------------------
176
177* Changed behavior of the default ``SSLContext`` when connecting to HTTPS proxy
178  during HTTPS requests. The default ``SSLContext`` now sets ``check_hostname=True``.
179
180
1811.26.3 (2021-01-26)
182-------------------
183
184* Fixed bytes and string comparison issue with headers (Pull #2141)
185
186* Changed ``ProxySchemeUnknown`` error message to be
187  more actionable if the user supplies a proxy URL without
188  a scheme. (Pull #2107)
189
190
1911.26.2 (2020-11-12)
192-------------------
193
194* Fixed an issue where ``wrap_socket`` and ``CERT_REQUIRED`` wouldn't
195  be imported properly on Python 2.7.8 and earlier (Pull #2052)
196
197
1981.26.1 (2020-11-11)
199-------------------
200
201* Fixed an issue where two ``User-Agent`` headers would be sent if a
202  ``User-Agent`` header key is passed as ``bytes`` (Pull #2047)
203
204
2051.26.0 (2020-11-10)
206-------------------
207
208* **NOTE: urllib3 v2.0 will drop support for Python 2**.
209  `Read more in the v2.0 Roadmap <https://urllib3.readthedocs.io/en/latest/v2-roadmap.html>`_.
210
211* Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)
212
213* Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that
214  still wish to use TLS earlier than 1.2 without a deprecation warning
215  should opt-in explicitly by setting ``ssl_version=ssl.PROTOCOL_TLSv1_1`` (Pull #2002)
216  **Starting in urllib3 v2.0: Connections that receive a ``DeprecationWarning`` will fail**
217
218* Deprecated ``Retry`` options ``Retry.DEFAULT_METHOD_WHITELIST``, ``Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST``
219  and ``Retry(method_whitelist=...)`` in favor of ``Retry.DEFAULT_ALLOWED_METHODS``,
220  ``Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT``, and ``Retry(allowed_methods=...)``
221  (Pull #2000) **Starting in urllib3 v2.0: Deprecated options will be removed**
222
223* Added default ``User-Agent`` header to every request (Pull #1750)
224
225* Added ``urllib3.util.SKIP_HEADER`` for skipping ``User-Agent``, ``Accept-Encoding``,
226  and ``Host`` headers from being automatically emitted with requests (Pull #2018)
227
228* Collapse ``transfer-encoding: chunked`` request data and framing into
229  the same ``socket.send()`` call (Pull #1906)
230
231* Send ``http/1.1`` ALPN identifier with every TLS handshake by default (Pull #1894)
232
233* Properly terminate SecureTransport connections when CA verification fails (Pull #1977)
234
235* Don't emit an ``SNIMissingWarning`` when passing ``server_hostname=None``
236  to SecureTransport (Pull #1903)
237
238* Disabled requesting TLSv1.2 session tickets as they weren't being used by urllib3 (Pull #1970)
239
240* Suppress ``BrokenPipeError`` when writing request body after the server
241  has closed the socket (Pull #1524)
242
243* Wrap ``ssl.SSLError`` that can be raised from reading a socket (e.g. "bad MAC")
244  into an ``urllib3.exceptions.SSLError`` (Pull #1939)
245
246
2471.25.11 (2020-10-19)
248--------------------
249
250* Fix retry backoff time parsed from ``Retry-After`` header when given
251  in the HTTP date format. The HTTP date was parsed as the local timezone
252  rather than accounting for the timezone in the HTTP date (typically
253  UTC) (Pull #1932, Pull #1935, Pull #1938, Pull #1949)
254
255* Fix issue where an error would be raised when the ``SSLKEYLOGFILE``
256  environment variable was set to the empty string. Now ``SSLContext.keylog_file``
257  is not set in this situation (Pull #2016)
258
259
2601.25.10 (2020-07-22)
261--------------------
262
263* Added support for ``SSLKEYLOGFILE`` environment variable for
264  logging TLS session keys with use with programs like
265  Wireshark for decrypting captured web traffic (Pull #1867)
266
267* Fixed loading of SecureTransport libraries on macOS Big Sur
268  due to the new dynamic linker cache (Pull #1905)
269
270* Collapse chunked request bodies data and framing into one
271  call to ``send()`` to reduce the number of TCP packets by 2-4x (Pull #1906)
272
273* Don't insert ``None`` into ``ConnectionPool`` if the pool
274  was empty when requesting a connection (Pull #1866)
275
276* Avoid ``hasattr`` call in ``BrotliDecoder.decompress()`` (Pull #1858)
277
278
2791.25.9 (2020-04-16)
280-------------------
281
282* Added ``InvalidProxyConfigurationWarning`` which is raised when
283  erroneously specifying an HTTPS proxy URL. urllib3 doesn't currently
284  support connecting to HTTPS proxies but will soon be able to
285  and we would like users to migrate properly without much breakage.
286
287  See `this GitHub issue <https://github.com/urllib3/urllib3/issues/1850>`_
288  for more information on how to fix your proxy config. (Pull #1851)
289
290* Drain connection after ``PoolManager`` redirect (Pull #1817)
291
292* Ensure ``load_verify_locations`` raises ``SSLError`` for all backends (Pull #1812)
293
294* Rename ``VerifiedHTTPSConnection`` to ``HTTPSConnection`` (Pull #1805)
295
296* Allow the CA certificate data to be passed as a string (Pull #1804)
297
298* Raise ``ValueError`` if method contains control characters (Pull #1800)
299
300* Add ``__repr__`` to ``Timeout`` (Pull #1795)
301
302
3031.25.8 (2020-01-20)
304-------------------
305
306* Drop support for EOL Python 3.4 (Pull #1774)
307
308* Optimize _encode_invalid_chars (Pull #1787)
309
310
3111.25.7 (2019-11-11)
312-------------------
313
314* Preserve ``chunked`` parameter on retries (Pull #1715, Pull #1734)
315
316* Allow unset ``SERVER_SOFTWARE`` in App Engine (Pull #1704, Issue #1470)
317
318* Fix issue where URL fragment was sent within the request target. (Pull #1732)
319
320* Fix issue where an empty query section in a URL would fail to parse. (Pull #1732)
321
322* Remove TLS 1.3 support in SecureTransport due to Apple removing support (Pull #1703)
323
324
3251.25.6 (2019-09-24)
326-------------------
327
328* Fix issue where tilde (``~``) characters were incorrectly
329  percent-encoded in the path. (Pull #1692)
330
331
3321.25.5 (2019-09-19)
333-------------------
334
335* Add mitigation for BPO-37428 affecting Python <3.7.4 and OpenSSL 1.1.1+ which
336  caused certificate verification to be enabled when using ``cert_reqs=CERT_NONE``.
337  (Issue #1682)
338
339
3401.25.4 (2019-09-19)
341-------------------
342
343* Propagate Retry-After header settings to subsequent retries. (Pull #1607)
344
345* Fix edge case where Retry-After header was still respected even when
346  explicitly opted out of. (Pull #1607)
347
348* Remove dependency on ``rfc3986`` for URL parsing.
349
350* Fix issue where URLs containing invalid characters within ``Url.auth`` would
351  raise an exception instead of percent-encoding those characters.
352
353* Add support for ``HTTPResponse.auto_close = False`` which makes HTTP responses
354  work well with BufferedReaders and other ``io`` module features. (Pull #1652)
355
356* Percent-encode invalid characters in URL for ``HTTPConnectionPool.request()`` (Pull #1673)
357
358
3591.25.3 (2019-05-23)
360-------------------
361
362* Change ``HTTPSConnection`` to load system CA certificates
363  when ``ca_certs``, ``ca_cert_dir``, and ``ssl_context`` are
364  unspecified. (Pull #1608, Issue #1603)
365
366* Upgrade bundled rfc3986 to v1.3.2. (Pull #1609, Issue #1605)
367
368
3691.25.2 (2019-04-28)
370-------------------
371
372* Change ``is_ipaddress`` to not detect IPvFuture addresses. (Pull #1583)
373
374* Change ``parse_url`` to percent-encode invalid characters within the
375  path, query, and target components. (Pull #1586)
376
377
3781.25.1 (2019-04-24)
379-------------------
380
381* Add support for Google's ``Brotli`` package. (Pull #1572, Pull #1579)
382
383* Upgrade bundled rfc3986 to v1.3.1 (Pull #1578)
384
385
3861.25 (2019-04-22)
387-----------------
388
389* Require and validate certificates by default when using HTTPS (Pull #1507)
390
391* Upgraded ``urllib3.utils.parse_url()`` to be RFC 3986 compliant. (Pull #1487)
392
393* Added support for ``key_password`` for ``HTTPSConnectionPool`` to use
394  encrypted ``key_file`` without creating your own ``SSLContext`` object. (Pull #1489)
395
396* Add TLSv1.3 support to CPython, pyOpenSSL, and SecureTransport ``SSLContext``
397  implementations. (Pull #1496)
398
399* Switched the default multipart header encoder from RFC 2231 to HTML 5 working draft. (Issue #303, Pull #1492)
400
401* Fixed issue where OpenSSL would block if an encrypted client private key was
402  given and no password was given. Instead an ``SSLError`` is raised. (Pull #1489)
403
404* Added support for Brotli content encoding. It is enabled automatically if
405  ``brotlipy`` package is installed which can be requested with
406  ``urllib3[brotli]`` extra. (Pull #1532)
407
408* Drop ciphers using DSS key exchange from default TLS cipher suites.
409  Improve default ciphers when using SecureTransport. (Pull #1496)
410
411* Implemented a more efficient ``HTTPResponse.__iter__()`` method. (Issue #1483)
412
4131.24.3 (2019-05-01)
414-------------------
415
416* Apply fix for CVE-2019-9740. (Pull #1591)
417
4181.24.2 (2019-04-17)
419-------------------
420
421* Don't load system certificates by default when any other ``ca_certs``, ``ca_certs_dir`` or
422  ``ssl_context`` parameters are specified.
423
424* Remove Authorization header regardless of case when redirecting to cross-site. (Issue #1510)
425
426* Add support for IPv6 addresses in subjectAltName section of certificates. (Issue #1269)
427
428
4291.24.1 (2018-11-02)
430-------------------
431
432* Remove quadratic behavior within ``GzipDecoder.decompress()`` (Issue #1467)
433
434* Restored functionality of ``ciphers`` parameter for ``create_urllib3_context()``. (Issue #1462)
435
436
4371.24 (2018-10-16)
438-----------------
439
440* Allow key_server_hostname to be specified when initializing a PoolManager to allow custom SNI to be overridden. (Pull #1449)
441
442* Test against Python 3.7 on AppVeyor. (Pull #1453)
443
444* Early-out ipv6 checks when running on App Engine. (Pull #1450)
445
446* Change ambiguous description of backoff_factor (Pull #1436)
447
448* Add ability to handle multiple Content-Encodings (Issue #1441 and Pull #1442)
449
450* Skip DNS names that can't be idna-decoded when using pyOpenSSL (Issue #1405).
451
452* Add a server_hostname parameter to HTTPSConnection which allows for
453  overriding the SNI hostname sent in the handshake. (Pull #1397)
454
455* Drop support for EOL Python 2.6 (Pull #1429 and Pull #1430)
456
457* Fixed bug where responses with header Content-Type: message/* erroneously
458  raised HeaderParsingError, resulting in a warning being logged. (Pull #1439)
459
460* Move urllib3 to src/urllib3 (Pull #1409)
461
462
4631.23 (2018-06-04)
464-----------------
465
466* Allow providing a list of headers to strip from requests when redirecting
467  to a different host. Defaults to the ``Authorization`` header. Different
468  headers can be set via ``Retry.remove_headers_on_redirect``. (Issue #1316)
469
470* Fix ``util.selectors._fileobj_to_fd`` to accept ``long`` (Issue #1247).
471
472* Dropped Python 3.3 support. (Pull #1242)
473
474* Put the connection back in the pool when calling stream() or read_chunked() on
475  a chunked HEAD response. (Issue #1234)
476
477* Fixed pyOpenSSL-specific ssl client authentication issue when clients
478  attempted to auth via certificate + chain (Issue #1060)
479
480* Add the port to the connectionpool connect print (Pull #1251)
481
482* Don't use the ``uuid`` module to create multipart data boundaries. (Pull #1380)
483
484* ``read_chunked()`` on a closed response returns no chunks. (Issue #1088)
485
486* Add Python 2.6 support to ``contrib.securetransport`` (Pull #1359)
487
488* Added support for auth info in url for SOCKS proxy (Pull #1363)
489
490
4911.22 (2017-07-20)
492-----------------
493
494* Fixed missing brackets in ``HTTP CONNECT`` when connecting to IPv6 address via
495  IPv6 proxy. (Issue #1222)
496
497* Made the connection pool retry on ``SSLError``.  The original ``SSLError``
498  is available on ``MaxRetryError.reason``. (Issue #1112)
499
500* Drain and release connection before recursing on retry/redirect.  Fixes
501  deadlocks with a blocking connectionpool. (Issue #1167)
502
503* Fixed compatibility for cookiejar. (Issue #1229)
504
505* pyopenssl: Use vendored version of ``six``. (Issue #1231)
506
507
5081.21.1 (2017-05-02)
509-------------------
510
511* Fixed SecureTransport issue that would cause long delays in response body
512  delivery. (Pull #1154)
513
514* Fixed regression in 1.21 that threw exceptions when users passed the
515  ``socket_options`` flag to the ``PoolManager``.  (Issue #1165)
516
517* Fixed regression in 1.21 that threw exceptions when users passed the
518  ``assert_hostname`` or ``assert_fingerprint`` flag to the ``PoolManager``.
519  (Pull #1157)
520
521
5221.21 (2017-04-25)
523-----------------
524
525* Improved performance of certain selector system calls on Python 3.5 and
526  later. (Pull #1095)
527
528* Resolved issue where the PyOpenSSL backend would not wrap SysCallError
529  exceptions appropriately when sending data. (Pull #1125)
530
531* Selectors now detects a monkey-patched select module after import for modules
532  that patch the select module like eventlet, greenlet. (Pull #1128)
533
534* Reduced memory consumption when streaming zlib-compressed responses
535  (as opposed to raw deflate streams). (Pull #1129)
536
537* Connection pools now use the entire request context when constructing the
538  pool key. (Pull #1016)
539
540* ``PoolManager.connection_from_*`` methods now accept a new keyword argument,
541  ``pool_kwargs``, which are merged with the existing ``connection_pool_kw``.
542  (Pull #1016)
543
544* Add retry counter for ``status_forcelist``. (Issue #1147)
545
546* Added ``contrib`` module for using SecureTransport on macOS:
547  ``urllib3.contrib.securetransport``.  (Pull #1122)
548
549* urllib3 now only normalizes the case of ``http://`` and ``https://`` schemes:
550  for schemes it does not recognise, it assumes they are case-sensitive and
551  leaves them unchanged.
552  (Issue #1080)
553
554
5551.20 (2017-01-19)
556-----------------
557
558* Added support for waiting for I/O using selectors other than select,
559  improving urllib3's behaviour with large numbers of concurrent connections.
560  (Pull #1001)
561
562* Updated the date for the system clock check. (Issue #1005)
563
564* ConnectionPools now correctly consider hostnames to be case-insensitive.
565  (Issue #1032)
566
567* Outdated versions of PyOpenSSL now cause the PyOpenSSL contrib module
568  to fail when it is injected, rather than at first use. (Pull #1063)
569
570* Outdated versions of cryptography now cause the PyOpenSSL contrib module
571  to fail when it is injected, rather than at first use. (Issue #1044)
572
573* Automatically attempt to rewind a file-like body object when a request is
574  retried or redirected. (Pull #1039)
575
576* Fix some bugs that occur when modules incautiously patch the queue module.
577  (Pull #1061)
578
579* Prevent retries from occurring on read timeouts for which the request method
580  was not in the method whitelist. (Issue #1059)
581
582* Changed the PyOpenSSL contrib module to lazily load idna to avoid
583  unnecessarily bloating the memory of programs that don't need it. (Pull
584  #1076)
585
586* Add support for IPv6 literals with zone identifiers. (Pull #1013)
587
588* Added support for socks5h:// and socks4a:// schemes when working with SOCKS
589  proxies, and controlled remote DNS appropriately. (Issue #1035)
590
591
5921.19.1 (2016-11-16)
593-------------------
594
595* Fixed AppEngine import that didn't function on Python 3.5. (Pull #1025)
596
597
5981.19 (2016-11-03)
599-----------------
600
601* urllib3 now respects Retry-After headers on 413, 429, and 503 responses when
602  using the default retry logic. (Pull #955)
603
604* Remove markers from setup.py to assist ancient setuptools versions. (Issue
605  #986)
606
607* Disallow superscripts and other integerish things in URL ports. (Issue #989)
608
609* Allow urllib3's HTTPResponse.stream() method to continue to work with
610  non-httplib underlying FPs. (Pull #990)
611
612* Empty filenames in multipart headers are now emitted as such, rather than
613  being suppressed. (Issue #1015)
614
615* Prefer user-supplied Host headers on chunked uploads. (Issue #1009)
616
617
6181.18.1 (2016-10-27)
619-------------------
620
621* CVE-2016-9015. Users who are using urllib3 version 1.17 or 1.18 along with
622  PyOpenSSL injection and OpenSSL 1.1.0 *must* upgrade to this version. This
623  release fixes a vulnerability whereby urllib3 in the above configuration
624  would silently fail to validate TLS certificates due to erroneously setting
625  invalid flags in OpenSSL's ``SSL_CTX_set_verify`` function. These erroneous
626  flags do not cause a problem in OpenSSL versions before 1.1.0, which
627  interprets the presence of any flag as requesting certificate validation.
628
629  There is no PR for this patch, as it was prepared for simultaneous disclosure
630  and release. The master branch received the same fix in Pull #1010.
631
632
6331.18 (2016-09-26)
634-----------------
635
636* Fixed incorrect message for IncompleteRead exception. (Pull #973)
637
638* Accept ``iPAddress`` subject alternative name fields in TLS certificates.
639  (Issue #258)
640
641* Fixed consistency of ``HTTPResponse.closed`` between Python 2 and 3.
642  (Issue #977)
643
644* Fixed handling of wildcard certificates when using PyOpenSSL. (Issue #979)
645
646
6471.17 (2016-09-06)
648-----------------
649
650* Accept ``SSLContext`` objects for use in SSL/TLS negotiation. (Issue #835)
651
652* ConnectionPool debug log now includes scheme, host, and port. (Issue #897)
653
654* Substantially refactored documentation. (Issue #887)
655
656* Used URLFetch default timeout on AppEngine, rather than hardcoding our own.
657  (Issue #858)
658
659* Normalize the scheme and host in the URL parser (Issue #833)
660
661* ``HTTPResponse`` contains the last ``Retry`` object, which now also
662  contains retries history. (Issue #848)
663
664* Timeout can no longer be set as boolean, and must be greater than zero.
665  (Pull #924)
666
667* Removed pyasn1 and ndg-httpsclient from dependencies used for PyOpenSSL. We
668  now use cryptography and idna, both of which are already dependencies of
669  PyOpenSSL. (Pull #930)
670
671* Fixed infinite loop in ``stream`` when amt=None. (Issue #928)
672
673* Try to use the operating system's certificates when we are using an
674  ``SSLContext``. (Pull #941)
675
676* Updated cipher suite list to allow ChaCha20+Poly1305. AES-GCM is preferred to
677  ChaCha20, but ChaCha20 is then preferred to everything else. (Pull #947)
678
679* Updated cipher suite list to remove 3DES-based cipher suites. (Pull #958)
680
681* Removed the cipher suite fallback to allow HIGH ciphers. (Pull #958)
682
683* Implemented ``length_remaining`` to determine remaining content
684  to be read. (Pull #949)
685
686* Implemented ``enforce_content_length`` to enable exceptions when
687  incomplete data chunks are received. (Pull #949)
688
689* Dropped connection start, dropped connection reset, redirect, forced retry,
690  and new HTTPS connection log levels to DEBUG, from INFO. (Pull #967)
691
692
6931.16 (2016-06-11)
694-----------------
695
696* Disable IPv6 DNS when IPv6 connections are not possible. (Issue #840)
697
698* Provide ``key_fn_by_scheme`` pool keying mechanism that can be
699  overridden. (Issue #830)
700
701* Normalize scheme and host to lowercase for pool keys, and include
702  ``source_address``. (Issue #830)
703
704* Cleaner exception chain in Python 3 for ``_make_request``.
705  (Issue #861)
706
707* Fixed installing ``urllib3[socks]`` extra. (Issue #864)
708
709* Fixed signature of ``ConnectionPool.close`` so it can actually safely be
710  called by subclasses. (Issue #873)
711
712* Retain ``release_conn`` state across retries. (Issues #651, #866)
713
714* Add customizable ``HTTPConnectionPool.ResponseCls``, which defaults to
715  ``HTTPResponse`` but can be replaced with a subclass. (Issue #879)
716
717
7181.15.1 (2016-04-11)
719-------------------
720
721* Fix packaging to include backports module. (Issue #841)
722
723
7241.15 (2016-04-06)
725-----------------
726
727* Added Retry(raise_on_status=False). (Issue #720)
728
729* Always use setuptools, no more distutils fallback. (Issue #785)
730
731* Dropped support for Python 3.2. (Issue #786)
732
733* Chunked transfer encoding when requesting with ``chunked=True``.
734  (Issue #790)
735
736* Fixed regression with IPv6 port parsing. (Issue #801)
737
738* Append SNIMissingWarning messages to allow users to specify it in
739  the PYTHONWARNINGS environment variable. (Issue #816)
740
741* Handle unicode headers in Py2. (Issue #818)
742
743* Log certificate when there is a hostname mismatch. (Issue #820)
744
745* Preserve order of request/response headers. (Issue #821)
746
747
7481.14 (2015-12-29)
749-----------------
750
751* contrib: SOCKS proxy support! (Issue #762)
752
753* Fixed AppEngine handling of transfer-encoding header and bug
754  in Timeout defaults checking. (Issue #763)
755
756
7571.13.1 (2015-12-18)
758-------------------
759
760* Fixed regression in IPv6 + SSL for match_hostname. (Issue #761)
761
762
7631.13 (2015-12-14)
764-----------------
765
766* Fixed ``pip install urllib3[secure]`` on modern pip. (Issue #706)
767
768* pyopenssl: Fixed SSL3_WRITE_PENDING error. (Issue #717)
769
770* pyopenssl: Support for TLSv1.1 and TLSv1.2. (Issue #696)
771
772* Close connections more defensively on exception. (Issue #734)
773
774* Adjusted ``read_chunked`` to handle gzipped, chunk-encoded bodies without
775  repeatedly flushing the decoder, to function better on Jython. (Issue #743)
776
777* Accept ``ca_cert_dir`` for SSL-related PoolManager configuration. (Issue #758)
778
779
7801.12 (2015-09-03)
781-----------------
782
783* Rely on ``six`` for importing ``httplib`` to work around
784  conflicts with other Python 3 shims. (Issue #688)
785
786* Add support for directories of certificate authorities, as supported by
787  OpenSSL. (Issue #701)
788
789* New exception: ``NewConnectionError``, raised when we fail to establish
790  a new connection, usually ``ECONNREFUSED`` socket error.
791
792
7931.11 (2015-07-21)
794-----------------
795
796* When ``ca_certs`` is given, ``cert_reqs`` defaults to
797  ``'CERT_REQUIRED'``. (Issue #650)
798
799* ``pip install urllib3[secure]`` will install Certifi and
800  PyOpenSSL as dependencies. (Issue #678)
801
802* Made ``HTTPHeaderDict`` usable as a ``headers`` input value
803  (Issues #632, #679)
804
805* Added `urllib3.contrib.appengine <https://urllib3.readthedocs.io/en/latest/contrib.html#google-app-engine>`_
806  which has an ``AppEngineManager`` for using ``URLFetch`` in a
807  Google AppEngine environment. (Issue #664)
808
809* Dev: Added test suite for AppEngine. (Issue #631)
810
811* Fix performance regression when using PyOpenSSL. (Issue #626)
812
813* Passing incorrect scheme (e.g. ``foo://``) will raise
814  ``ValueError`` instead of ``AssertionError`` (backwards
815  compatible for now, but please migrate). (Issue #640)
816
817* Fix pools not getting replenished when an error occurs during a
818  request using ``release_conn=False``. (Issue #644)
819
820* Fix pool-default headers not applying for url-encoded requests
821  like GET. (Issue #657)
822
823* log.warning in Python 3 when headers are skipped due to parsing
824  errors. (Issue #642)
825
826* Close and discard connections if an error occurs during read.
827  (Issue #660)
828
829* Fix host parsing for IPv6 proxies. (Issue #668)
830
831* Separate warning type SubjectAltNameWarning, now issued once
832  per host. (Issue #671)
833
834* Fix ``httplib.IncompleteRead`` not getting converted to
835  ``ProtocolError`` when using ``HTTPResponse.stream()``
836  (Issue #674)
837
8381.10.4 (2015-05-03)
839-------------------
840
841* Migrate tests to Tornado 4. (Issue #594)
842
843* Append default warning configuration rather than overwrite.
844  (Issue #603)
845
846* Fix streaming decoding regression. (Issue #595)
847
848* Fix chunked requests losing state across keep-alive connections.
849  (Issue #599)
850
851* Fix hanging when chunked HEAD response has no body. (Issue #605)
852
853
8541.10.3 (2015-04-21)
855-------------------
856
857* Emit ``InsecurePlatformWarning`` when SSLContext object is missing.
858  (Issue #558)
859
860* Fix regression of duplicate header keys being discarded.
861  (Issue #563)
862
863* ``Response.stream()`` returns a generator for chunked responses.
864  (Issue #560)
865
866* Set upper-bound timeout when waiting for a socket in PyOpenSSL.
867  (Issue #585)
868
869* Work on platforms without `ssl` module for plain HTTP requests.
870  (Issue #587)
871
872* Stop relying on the stdlib's default cipher list. (Issue #588)
873
874
8751.10.2 (2015-02-25)
876-------------------
877
878* Fix file descriptor leakage on retries. (Issue #548)
879
880* Removed RC4 from default cipher list. (Issue #551)
881
882* Header performance improvements. (Issue #544)
883
884* Fix PoolManager not obeying redirect retry settings. (Issue #553)
885
886
8871.10.1 (2015-02-10)
888-------------------
889
890* Pools can be used as context managers. (Issue #545)
891
892* Don't re-use connections which experienced an SSLError. (Issue #529)
893
894* Don't fail when gzip decoding an empty stream. (Issue #535)
895
896* Add sha256 support for fingerprint verification. (Issue #540)
897
898* Fixed handling of header values containing commas. (Issue #533)
899
900
9011.10 (2014-12-14)
902-----------------
903
904* Disabled SSLv3. (Issue #473)
905
906* Add ``Url.url`` property to return the composed url string. (Issue #394)
907
908* Fixed PyOpenSSL + gevent ``WantWriteError``. (Issue #412)
909
910* ``MaxRetryError.reason`` will always be an exception, not string.
911  (Issue #481)
912
913* Fixed SSL-related timeouts not being detected as timeouts. (Issue #492)
914
915* Py3: Use ``ssl.create_default_context()`` when available. (Issue #473)
916
917* Emit ``InsecureRequestWarning`` for *every* insecure HTTPS request.
918  (Issue #496)
919
920* Emit ``SecurityWarning`` when certificate has no ``subjectAltName``.
921  (Issue #499)
922
923* Close and discard sockets which experienced SSL-related errors.
924  (Issue #501)
925
926* Handle ``body`` param in ``.request(...)``. (Issue #513)
927
928* Respect timeout with HTTPS proxy. (Issue #505)
929
930* PyOpenSSL: Handle ZeroReturnError exception. (Issue #520)
931
932
9331.9.1 (2014-09-13)
934------------------
935
936* Apply socket arguments before binding. (Issue #427)
937
938* More careful checks if fp-like object is closed. (Issue #435)
939
940* Fixed packaging issues of some development-related files not
941  getting included. (Issue #440)
942
943* Allow performing *only* fingerprint verification. (Issue #444)
944
945* Emit ``SecurityWarning`` if system clock is waaay off. (Issue #445)
946
947* Fixed PyOpenSSL compatibility with PyPy. (Issue #450)
948
949* Fixed ``BrokenPipeError`` and ``ConnectionError`` handling in Py3.
950  (Issue #443)
951
952
953
9541.9 (2014-07-04)
955----------------
956
957* Shuffled around development-related files. If you're maintaining a distro
958  package of urllib3, you may need to tweak things. (Issue #415)
959
960* Unverified HTTPS requests will trigger a warning on the first request. See
961  our new `security documentation
962  <https://urllib3.readthedocs.io/en/latest/security.html>`_ for details.
963  (Issue #426)
964
965* New retry logic and ``urllib3.util.retry.Retry`` configuration object.
966  (Issue #326)
967
968* All raised exceptions should now wrapped in a
969  ``urllib3.exceptions.HTTPException``-extending exception. (Issue #326)
970
971* All errors during a retry-enabled request should be wrapped in
972  ``urllib3.exceptions.MaxRetryError``, including timeout-related exceptions
973  which were previously exempt. Underlying error is accessible from the
974  ``.reason`` property. (Issue #326)
975
976* ``urllib3.exceptions.ConnectionError`` renamed to
977  ``urllib3.exceptions.ProtocolError``. (Issue #326)
978
979* Errors during response read (such as IncompleteRead) are now wrapped in
980  ``urllib3.exceptions.ProtocolError``. (Issue #418)
981
982* Requesting an empty host will raise ``urllib3.exceptions.LocationValueError``.
983  (Issue #417)
984
985* Catch read timeouts over SSL connections as
986  ``urllib3.exceptions.ReadTimeoutError``. (Issue #419)
987
988* Apply socket arguments before connecting. (Issue #427)
989
990
9911.8.3 (2014-06-23)
992------------------
993
994* Fix TLS verification when using a proxy in Python 3.4.1. (Issue #385)
995
996* Add ``disable_cache`` option to ``urllib3.util.make_headers``. (Issue #393)
997
998* Wrap ``socket.timeout`` exception with
999  ``urllib3.exceptions.ReadTimeoutError``. (Issue #399)
1000
1001* Fixed proxy-related bug where connections were being reused incorrectly.
1002  (Issues #366, #369)
1003
1004* Added ``socket_options`` keyword parameter which allows to define
1005  ``setsockopt`` configuration of new sockets. (Issue #397)
1006
1007* Removed ``HTTPConnection.tcp_nodelay`` in favor of
1008  ``HTTPConnection.default_socket_options``. (Issue #397)
1009
1010* Fixed ``TypeError`` bug in Python 2.6.4. (Issue #411)
1011
1012
10131.8.2 (2014-04-17)
1014------------------
1015
1016* Fix ``urllib3.util`` not being included in the package.
1017
1018
10191.8.1 (2014-04-17)
1020------------------
1021
1022* Fix AppEngine bug of HTTPS requests going out as HTTP. (Issue #356)
1023
1024* Don't install ``dummyserver`` into ``site-packages`` as it's only needed
1025  for the test suite. (Issue #362)
1026
1027* Added support for specifying ``source_address``. (Issue #352)
1028
1029
10301.8 (2014-03-04)
1031----------------
1032
1033* Improved url parsing in ``urllib3.util.parse_url`` (properly parse '@' in
1034  username, and blank ports like 'hostname:').
1035
1036* New ``urllib3.connection`` module which contains all the HTTPConnection
1037  objects.
1038
1039* Several ``urllib3.util.Timeout``-related fixes. Also changed constructor
1040  signature to a more sensible order. [Backwards incompatible]
1041  (Issues #252, #262, #263)
1042
1043* Use ``backports.ssl_match_hostname`` if it's installed. (Issue #274)
1044
1045* Added ``.tell()`` method to ``urllib3.response.HTTPResponse`` which
1046  returns the number of bytes read so far. (Issue #277)
1047
1048* Support for platforms without threading. (Issue #289)
1049
1050* Expand default-port comparison in ``HTTPConnectionPool.is_same_host``
1051  to allow a pool with no specified port to be considered equal to to an
1052  HTTP/HTTPS url with port 80/443 explicitly provided. (Issue #305)
1053
1054* Improved default SSL/TLS settings to avoid vulnerabilities.
1055  (Issue #309)
1056
1057* Fixed ``urllib3.poolmanager.ProxyManager`` not retrying on connect errors.
1058  (Issue #310)
1059
1060* Disable Nagle's Algorithm on the socket for non-proxies. A subset of requests
1061  will send the entire HTTP request ~200 milliseconds faster; however, some of
1062  the resulting TCP packets will be smaller. (Issue #254)
1063
1064* Increased maximum number of SubjectAltNames in ``urllib3.contrib.pyopenssl``
1065  from the default 64 to 1024 in a single certificate. (Issue #318)
1066
1067* Headers are now passed and stored as a custom
1068  ``urllib3.collections_.HTTPHeaderDict`` object rather than a plain ``dict``.
1069  (Issue #329, #333)
1070
1071* Headers no longer lose their case on Python 3. (Issue #236)
1072
1073* ``urllib3.contrib.pyopenssl`` now uses the operating system's default CA
1074  certificates on inject. (Issue #332)
1075
1076* Requests with ``retries=False`` will immediately raise any exceptions without
1077  wrapping them in ``MaxRetryError``. (Issue #348)
1078
1079* Fixed open socket leak with SSL-related failures. (Issue #344, #348)
1080
1081
10821.7.1 (2013-09-25)
1083------------------
1084
1085* Added granular timeout support with new ``urllib3.util.Timeout`` class.
1086  (Issue #231)
1087
1088* Fixed Python 3.4 support. (Issue #238)
1089
1090
10911.7 (2013-08-14)
1092----------------
1093
1094* More exceptions are now pickle-able, with tests. (Issue #174)
1095
1096* Fixed redirecting with relative URLs in Location header. (Issue #178)
1097
1098* Support for relative urls in ``Location: ...`` header. (Issue #179)
1099
1100* ``urllib3.response.HTTPResponse`` now inherits from ``io.IOBase`` for bonus
1101  file-like functionality. (Issue #187)
1102
1103* Passing ``assert_hostname=False`` when creating a HTTPSConnectionPool will
1104  skip hostname verification for SSL connections. (Issue #194)
1105
1106* New method ``urllib3.response.HTTPResponse.stream(...)`` which acts as a
1107  generator wrapped around ``.read(...)``. (Issue #198)
1108
1109* IPv6 url parsing enforces brackets around the hostname. (Issue #199)
1110
1111* Fixed thread race condition in
1112  ``urllib3.poolmanager.PoolManager.connection_from_host(...)`` (Issue #204)
1113
1114* ``ProxyManager`` requests now include non-default port in ``Host: ...``
1115  header. (Issue #217)
1116
1117* Added HTTPS proxy support in ``ProxyManager``. (Issue #170 #139)
1118
1119* New ``RequestField`` object can be passed to the ``fields=...`` param which
1120  can specify headers. (Issue #220)
1121
1122* Raise ``urllib3.exceptions.ProxyError`` when connecting to proxy fails.
1123  (Issue #221)
1124
1125* Use international headers when posting file names. (Issue #119)
1126
1127* Improved IPv6 support. (Issue #203)
1128
1129
11301.6 (2013-04-25)
1131----------------
1132
1133* Contrib: Optional SNI support for Py2 using PyOpenSSL. (Issue #156)
1134
1135* ``ProxyManager`` automatically adds ``Host: ...`` header if not given.
1136
1137* Improved SSL-related code. ``cert_req`` now optionally takes a string like
1138  "REQUIRED" or "NONE". Same with ``ssl_version`` takes strings like "SSLv23"
1139  The string values reflect the suffix of the respective constant variable.
1140  (Issue #130)
1141
1142* Vendored ``socksipy`` now based on Anorov's fork which handles unexpectedly
1143  closed proxy connections and larger read buffers. (Issue #135)
1144
1145* Ensure the connection is closed if no data is received, fixes connection leak
1146  on some platforms. (Issue #133)
1147
1148* Added SNI support for SSL/TLS connections on Py32+. (Issue #89)
1149
1150* Tests fixed to be compatible with Py26 again. (Issue #125)
1151
1152* Added ability to choose SSL version by passing an ``ssl.PROTOCOL_*`` constant
1153  to the ``ssl_version`` parameter of ``HTTPSConnectionPool``. (Issue #109)
1154
1155* Allow an explicit content type to be specified when encoding file fields.
1156  (Issue #126)
1157
1158* Exceptions are now pickleable, with tests. (Issue #101)
1159
1160* Fixed default headers not getting passed in some cases. (Issue #99)
1161
1162* Treat "content-encoding" header value as case-insensitive, per RFC 2616
1163  Section 3.5. (Issue #110)
1164
1165* "Connection Refused" SocketErrors will get retried rather than raised.
1166  (Issue #92)
1167
1168* Updated vendored ``six``, no longer overrides the global ``six`` module
1169  namespace. (Issue #113)
1170
1171* ``urllib3.exceptions.MaxRetryError`` contains a ``reason`` property holding
1172  the exception that prompted the final retry. If ``reason is None`` then it
1173  was due to a redirect. (Issue #92, #114)
1174
1175* Fixed ``PoolManager.urlopen()`` from not redirecting more than once.
1176  (Issue #149)
1177
1178* Don't assume ``Content-Type: text/plain`` for multi-part encoding parameters
1179  that are not files. (Issue #111)
1180
1181* Pass `strict` param down to ``httplib.HTTPConnection``. (Issue #122)
1182
1183* Added mechanism to verify SSL certificates by fingerprint (md5, sha1) or
1184  against an arbitrary hostname (when connecting by IP or for misconfigured
1185  servers). (Issue #140)
1186
1187* Streaming decompression support. (Issue #159)
1188
1189
11901.5 (2012-08-02)
1191----------------
1192
1193* Added ``urllib3.add_stderr_logger()`` for quickly enabling STDERR debug
1194  logging in urllib3.
1195
1196* Native full URL parsing (including auth, path, query, fragment) available in
1197  ``urllib3.util.parse_url(url)``.
1198
1199* Built-in redirect will switch method to 'GET' if status code is 303.
1200  (Issue #11)
1201
1202* ``urllib3.PoolManager`` strips the scheme and host before sending the request
1203  uri. (Issue #8)
1204
1205* New ``urllib3.exceptions.DecodeError`` exception for when automatic decoding,
1206  based on the Content-Type header, fails.
1207
1208* Fixed bug with pool depletion and leaking connections (Issue #76). Added
1209  explicit connection closing on pool eviction. Added
1210  ``urllib3.PoolManager.clear()``.
1211
1212* 99% -> 100% unit test coverage.
1213
1214
12151.4 (2012-06-16)
1216----------------
1217
1218* Minor AppEngine-related fixes.
1219
1220* Switched from ``mimetools.choose_boundary`` to ``uuid.uuid4()``.
1221
1222* Improved url parsing. (Issue #73)
1223
1224* IPv6 url support. (Issue #72)
1225
1226
12271.3 (2012-03-25)
1228----------------
1229
1230* Removed pre-1.0 deprecated API.
1231
1232* Refactored helpers into a ``urllib3.util`` submodule.
1233
1234* Fixed multipart encoding to support list-of-tuples for keys with multiple
1235  values. (Issue #48)
1236
1237* Fixed multiple Set-Cookie headers in response not getting merged properly in
1238  Python 3. (Issue #53)
1239
1240* AppEngine support with Py27. (Issue #61)
1241
1242* Minor ``encode_multipart_formdata`` fixes related to Python 3 strings vs
1243  bytes.
1244
1245
12461.2.2 (2012-02-06)
1247------------------
1248
1249* Fixed packaging bug of not shipping ``test-requirements.txt``. (Issue #47)
1250
1251
12521.2.1 (2012-02-05)
1253------------------
1254
1255* Fixed another bug related to when ``ssl`` module is not available. (Issue #41)
1256
1257* Location parsing errors now raise ``urllib3.exceptions.LocationParseError``
1258  which inherits from ``ValueError``.
1259
1260
12611.2 (2012-01-29)
1262----------------
1263
1264* Added Python 3 support (tested on 3.2.2)
1265
1266* Dropped Python 2.5 support (tested on 2.6.7, 2.7.2)
1267
1268* Use ``select.poll`` instead of ``select.select`` for platforms that support
1269  it.
1270
1271* Use ``Queue.LifoQueue`` instead of ``Queue.Queue`` for more aggressive
1272  connection reusing. Configurable by overriding ``ConnectionPool.QueueCls``.
1273
1274* Fixed ``ImportError`` during install when ``ssl`` module is not available.
1275  (Issue #41)
1276
1277* Fixed ``PoolManager`` redirects between schemes (such as HTTP -> HTTPS) not
1278  completing properly. (Issue #28, uncovered by Issue #10 in v1.1)
1279
1280* Ported ``dummyserver`` to use ``tornado`` instead of ``webob`` +
1281  ``eventlet``. Removed extraneous unsupported dummyserver testing backends.
1282  Added socket-level tests.
1283
1284* More tests. Achievement Unlocked: 99% Coverage.
1285
1286
12871.1 (2012-01-07)
1288----------------
1289
1290* Refactored ``dummyserver`` to its own root namespace module (used for
1291  testing).
1292
1293* Added hostname verification for ``VerifiedHTTPSConnection`` by vendoring in
1294  Py32's ``ssl_match_hostname``. (Issue #25)
1295
1296* Fixed cross-host HTTP redirects when using ``PoolManager``. (Issue #10)
1297
1298* Fixed ``decode_content`` being ignored when set through ``urlopen``. (Issue
1299  #27)
1300
1301* Fixed timeout-related bugs. (Issues #17, #23)
1302
1303
13041.0.2 (2011-11-04)
1305------------------
1306
1307* Fixed typo in ``VerifiedHTTPSConnection`` which would only present as a bug if
1308  you're using the object manually. (Thanks pyos)
1309
1310* Made RecentlyUsedContainer (and consequently PoolManager) more thread-safe by
1311  wrapping the access log in a mutex. (Thanks @christer)
1312
1313* Made RecentlyUsedContainer more dict-like (corrected ``__delitem__`` and
1314  ``__getitem__`` behaviour), with tests. Shouldn't affect core urllib3 code.
1315
1316
13171.0.1 (2011-10-10)
1318------------------
1319
1320* Fixed a bug where the same connection would get returned into the pool twice,
1321  causing extraneous "HttpConnectionPool is full" log warnings.
1322
1323
13241.0 (2011-10-08)
1325----------------
1326
1327* Added ``PoolManager`` with LRU expiration of connections (tested and
1328  documented).
1329* Added ``ProxyManager`` (needs tests, docs, and confirmation that it works
1330  with HTTPS proxies).
1331* Added optional partial-read support for responses when
1332  ``preload_content=False``. You can now make requests and just read the headers
1333  without loading the content.
1334* Made response decoding optional (default on, same as before).
1335* Added optional explicit boundary string for ``encode_multipart_formdata``.
1336* Convenience request methods are now inherited from ``RequestMethods``. Old
1337  helpers like ``get_url`` and ``post_url`` should be abandoned in favour of
1338  the new ``request(method, url, ...)``.
1339* Refactored code to be even more decoupled, reusable, and extendable.
1340* License header added to ``.py`` files.
1341* Embiggened the documentation: Lots of Sphinx-friendly docstrings in the code
1342  and docs in ``docs/`` and on https://urllib3.readthedocs.io/.
1343* Embettered all the things!
1344* Started writing this file.
1345
1346
13470.4.1 (2011-07-17)
1348------------------
1349
1350* Minor bug fixes, code cleanup.
1351
1352
13530.4 (2011-03-01)
1354----------------
1355
1356* Better unicode support.
1357* Added ``VerifiedHTTPSConnection``.
1358* Added ``NTLMConnectionPool`` in contrib.
1359* Minor improvements.
1360
1361
13620.3.1 (2010-07-13)
1363------------------
1364
1365* Added ``assert_host_name`` optional parameter. Now compatible with proxies.
1366
1367
13680.3 (2009-12-10)
1369----------------
1370
1371* Added HTTPS support.
1372* Minor bug fixes.
1373* Refactored, broken backwards compatibility with 0.2.
1374* API to be treated as stable from this version forward.
1375
1376
13770.2 (2008-11-17)
1378----------------
1379
1380* Added unit tests.
1381* Bug fixes.
1382
1383
13840.1 (2008-11-16)
1385----------------
1386
1387* First release.
1388
1389
1390