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