更改日志#

2.0.5(2023-09-20)#

  • 允许的pyOpenSSL第三方模块,没有任何弃用警告。 (#3126 _)

  • 固定默认设置 blocksize of HTTPConnection classes to match high-level classes. Previously was 8KiB, now 16KiB. (#3066 )

2.0.4(2023-07-19)#

  • 添加了对联合运算符的支持 HTTPHeaderDict (#2254 )

  • 增列 BaseHTTPResponse to urllib3.__all__ (#3078 )

  • 固定 urllib3.connection.HTTPConnection to raise the http.client.connect audit event to have the same behavior as the standard library HTTP client (#2757 )

  • 依赖标准库检查受支持的PyPy版本中的主机名 (#3087 _)

2.0.3(2023-06-07)#

  • 允许替代的SSL库,如LibreSSL,同时仍发出警告,因为我们无法帮助面临OpenSSL以外的实现问题的用户。 (#3020 _)

  • 没有显式方案的不推荐使用的URL (#2950 )

  • 修复了压缩数据由多个帧组成时使用Z标准进行响应解码的问题。 (#3008 _)

  • 固定 assert_hostname=False to correctly skip hostname check. (#3051 )

2.0.2(2023-05-03)#

  • 固定 HTTPResponse.stream() to continue yielding bytes if buffered decompressed data was still available to be read even if the underlying socket is closed. This prevents a compressed response from being truncated. (#3009 )

2.0.1(2023-04-30)#

  • 修复了指纹或主机名验证失败时的套接字泄漏。 (#2991 _)

  • 修复了以下情况下的错误 HTTPResponse.read(0) was the first read call or when the internal response body buffer was otherwise empty. (#2998 )

2.0.0(2023-04-26)#

请阅读 v2.0 migration guide 有关升级到最新版本的urllib3的帮助。

已删除#

  • 删除了对Python2.7、3.5和3.6的支持 (#883 _, #2336 )。

  • 删除了证书上的回退 commonName in match_hostname() function. This behavior was deprecated in May 2000 in RFC 2818. Instead only subjectAltName is used to verify the hostname by default. To enable verifying the hostname against commonName use SSLContext.hostname_checks_common_name = True (#2113 )。

  • 删除了对具有 ssl module compiled with LibreSSL, CiscoSSL, wolfSSL, and all other OpenSSL alternatives. Python is moving to require OpenSSL with PEP 644 (#2168 )。

  • 删除了对早于1.1.1或不支持SNI的OpenSSL版本的支持。当检测到不兼容的OpenSSL版本时, ImportError is raised (#2168 )。

  • 删除了OpenSSL1.1.1+和SecureTransport的默认密码列表,因为它们自己的默认密码已经是安全的 (#2082 _)。

  • 已删除 urllib3.contrib.appengine.AppEngineManager and support for Google App Engine Standard Environment (#2044 )。

  • 已删除,已弃用 Retry options method_whitelist, DEFAULT_REDIRECT_HEADERS_BLACKLIST (#2086 )。

  • 已删除 urllib3.HTTPResponse.from_httplib (#2648 )。

  • 删除的默认值为 None for the request_context parameter of urllib3.PoolManager.connection_from_pool_key. This change should have no effect on users as the default value of None was an invalid option and was never used (#1897 )。

  • 删除了 urllib3.request module. urllib3.request.RequestMethods has been made a private API. This change was made to ensure that from urllib3 import request imported the top-level request() function instead of the urllib3.request module (#2269 )。

  • 中删除了对SSLv3.0的支持 urllib3.contrib.pyopenssl even when support is available from the compiled OpenSSL library (#2233 )。

  • 删除了不推荐使用的 urllib3.contrib.ntlmpool module (#2339 )。

  • 已删除 DEFAULT_CIPHERS, HAS_SNI, USE_DEFAULT_SSLCONTEXT_CIPHERS, from the private module urllib3.util.ssl_ (#2168 )。

  • 已删除 urllib3.exceptions.SNIMissingWarning (#2168 )。

  • 删除了 _prepare_conn method from HTTPConnectionPool. Previously this was only used to call HTTPSConnection.set_cert() by HTTPSConnectionPool (#1985 )。

  • 已删除 tls_in_tls_required property from HTTPSConnection. This is now determined from the scheme parameter in HTTPConnection.set_tunnel() (#1985 )。

  • 删除了 strict parameter/attribute from HTTPConnection, HTTPSConnection, HTTPConnectionPool, HTTPSConnectionPool, and HTTPResponse (#2064 )。

已弃用#

  • 已弃用 HTTPResponse.getheaders() and HTTPResponse.getheader() which will be removed in urllib3 v2.1.0. Instead use HTTPResponse.headers and HTTPResponse.headers.get(name, default). (#1543#2814 )。

  • 已弃用 urllib3.contrib.pyopenssl module which will be removed in urllib3 v2.1.0 (#2691 )。

  • 已弃用 urllib3.contrib.securetransport module which will be removed in urllib3 v2.1.0 (#2692 )。

  • 已弃用 ssl_version option in favor of ssl_minimum_version. ssl_version will be removed in urllib3 v2.1.0 (#2110 )。

  • 不推荐使用 strict parameter of PoolManager.connection_from_context() as it's not longer needed in Python 3.x. It will be removed in urllib3 v2.1.0 (#2267 )

  • 不推荐使用 NewConnectionError.pool attribute which will be removed in urllib3 v2.1.0 (#2271 )。

  • 已弃用 format_header_param_html5 and format_header_param in favor of format_multipart_header_param (#2257 )。

  • 已弃用 RequestField.header_formatter parameter which will be removed in urllib3 v2.1.0 (#2257 )。

  • 已弃用 HTTPSConnection.set_cert() method. Instead pass parameters to the HTTPSConnection constructor (#1985 )。

  • 已弃用 HTTPConnection.request_chunked() method which will be removed in urllib3 v2.1.0. Instead pass chunked=True to HTTPConnection.request() (#1985 )。

增列#

  • 增加了顶层 urllib3.request function which uses a preconfigured module-global PoolManager instance (#2150 )。

  • 添加了 json parameter to urllib3.request(), PoolManager.request(), and ConnectionPool.request() methods to send JSON bodies in requests. Using this parameter will set the header Content-Type: application/json if Content-Type isn't already defined. Added support for parsing JSON response bodies with HTTPResponse.json() method (#2243 )。

  • 将类型提示添加到 urllib3 module (#1897 )。

  • 增列 ssl_minimum_version and ssl_maximum_version options which set SSLContext.minimum_version and SSLContext.maximum_version (#2110 )。

  • 在以下情况下添加了对Z标准(RFC 8878)的支持 zstandard 1.18.0 or later is installed. Added the zstd extra which installs the zstandard package (#1992 )。

  • 增列 urllib3.response.BaseHTTPResponse class. All future response classes will be subclasses of BaseHTTPResponse (#2083 )。

  • 增列 FullPoolError which is raised when PoolManager(block=True) and a connection is returned to a full pool (#2197 )。

  • 增列 HTTPHeaderDict to the top-level urllib3 namespace (#2216 )。

  • 添加了对使用HTTPHeaderDict配置标题合并行为的支持 HTTPHeaderDict to provide headers for a request, by default duplicate header values will be repeated. But if combine=True is passed into a call to HTTPHeaderDict.add, then the added header value will be merged in with an existing value into a comma-separated list (X-My-Header: foo, bar) (#2242 )。

  • 增列 NameResolutionError exception when a DNS error occurs (#2305 )。

  • 增列 proxy_assert_hostname and proxy_assert_fingerprint kwargs to ProxyManager (#2409 )。

  • 添加了可配置的 backoff_max parameter to the Retry class. If a custom backoff_max is provided to the Retry class, it will replace the Retry.DEFAULT_BACKOFF_MAX (#2494 )。

  • 添加了 authority property to the Url class as per RFC 3986 3.2. This property should be used in place of netloc for users who want to include the userinfo (auth) component of the URI (#2520 )。

  • 添加了 scheme parameter to HTTPConnection.set_tunnel to configure the scheme of the origin being tunnelled to (#1985 )。

  • 添加了 is_closed, is_connected and has_connected_to_proxy properties to HTTPConnection (#1985 )。

  • 添加了可选选项 backoff_jitter parameter to Retry. (#2952 )

变化#

  • 变化 urllib3.response.HTTPResponse.read 尊重…的语义 io.BufferedIOBase 而不考虑压缩。具体地说,此方法:

    • 仅返回空字节对象以指示EOF(即响应已完全使用)。

    • 从不返回超过请求的字节数。

    • 可以发出任意数量的系统调用:零个、一个或多个。

    如果您想要每一个 urllib3.response.HTTPResponse.read call to issue a single system call, you need to disable decompression by setting decode_content=False (#2128 )。

  • 变化 urllib3.HTTPConnection.getresponse to return an instance of urllib3.HTTPResponse instead of http.client.HTTPResponse (#2648 )。

  • 变化 ssl_version to instead set the corresponding SSLContext.minimum_version and SSLContext.maximum_version values. Regardless of ssl_version passed SSLContext objects are now constructed using ssl.PROTOCOL_TLS_CLIENT (#2110 )。

  • 更改的默认设置 SSLContext.minimum_version to be TLSVersion.TLSv1_2 in line with Python 3.10 (#2373 )。

  • 变化 ProxyError to wrap any connection error (timeout, TLS, DNS) that occurs when connecting to the proxy (#2482 )。

  • 变化 urllib3.util.create_urllib3_context to not override the system cipher suites with a default value. The new default will be cipher suites configured by the operating system (#2168 )。

  • 变化 multipart/form-data header parameter formatting matches the WHATWG HTML Standard as of 2021-06-10. Control characters in filenames are no longer percent encoded (#2257 )。

  • 已更改通过HTTPS连接时引发的错误 ssl module isn't available from SSLError to ImportError (#2589 )。

  • 变化 HTTPConnection.request() to always use lowercase chunk boundaries when sending requests with Transfer-Encoding: chunked (#2515 )。

  • 变化 enforce_content_length default to True, preventing silent data loss when reading streamed responses (#2514 )。

  • 已更改内部实施 HTTPHeaderDict to use dict instead of collections.OrderedDict for better performance (#2080 )。

  • 更改了 urllib3.contrib.pyopenssl module to wrap OpenSSL.SSL.Error with ssl.SSLError in PyOpenSSLContext.load_cert_chain (#2628 )。

  • 已更改不推荐使用的用法 socket.error to OSError (#2120 )。

  • 中的所有参数已更改 HTTPConnection and HTTPSConnection constructors to be keyword-only except host and port (#1985 )。

  • 变化 HTTPConnection.getresponse() to set the socket timeout from HTTPConnection.timeout value before reading data from the socket. This previously was done manually by the HTTPConnectionPool calling HTTPConnection.sock.settimeout(...) (#1985 )。

  • 更改了 _proxy_host property to _tunnel_host in HTTPConnectionPool to more closely match how the property is used (value in HTTPConnection.set_tunnel()) (#1985 )。

  • 更改的名称 Retry.BACK0FF_MAX 成为 Retry.DEFAULT_BACKOFF_MAX

  • 已将TLS握手更改为使用 SSLContext.check_hostname when possible (#2452 )。

  • 变化 server_hostname to behave like other parameters only used by HTTPSConnectionPool (#2537 )。

  • 更改了默认设置 blocksize to 16KB to match OpenSSL's default read amounts (#2348 )。

  • 变化 HTTPResponse.read() to raise an error when calling with decode_content=False after using decode_content=True to prevent data loss (#2800 )。

固定#

  • 修复了在访问 PoolManager with many distinct origins would cause connection pools to be closed while requests are in progress (#1252 )。

  • 修复了以下问题: HTTPConnection instance would erroneously reuse the socket read timeout value from reading the previous response instead of a newly configured connect timeout. Instead now if HTTPConnection.timeout is updated before sending the next request the new timeout value will be used (#2645 )。

  • 固定 socket.error.errno when raised from pyOpenSSL's OpenSSL.SSL.SysCallError (#2118 )。

  • 修正了缺省值 HTTPSConnection.socket_options to match HTTPConnection (#2213 )。

  • 修复了以下位置的错误 headers would be modified by the remove_headers_on_redirect feature (#2272 )。

  • 修复了中的引用周期错误 urllib3.util.connection.create_connection() (#2277 )。

  • 修复了以下情况下的套接字泄漏 HTTPConnection.connect() fails (#2571 )。

  • 固定 urllib3.contrib.pyopenssl.WrappedSocket and urllib3.contrib.securetransport.WrappedSocket close methods (#2970 )

1.26.16(2023-05-23)#

  • 修复了在访问 PoolManager 具有多个不同来源的连接将导致在请求进行时关闭连接池 (#2954 )

1.26.15(2023-03-10)#

  • 修复套接字超时值 HTTPConnection is reused (#2645 )

  • 删除“!”IPv6区域ID解析中来自非保留字符的字符 (#2899 _)

  • 修复‘x80’字节的Idna处理 (#2901 _)

1.26.14(2023-01-11)#

  • 修复了对端口0(零)的解析,返回None而不是0。 (#2850 _)

  • 删除了Conrib模块中不推荐使用的getheaders()调用。修复了的类型提示 PoolKey.key_retries by adding bool to the union. (#2865 )

1.26.13(2022-11-23)#

  • 不推荐使用 HTTPResponse.getheaders()HTTPResponse.getheader() 方法:研究方法。

  • 修复了端口中带有前导零的URL的解析将被拒绝的问题,即使删除零后的端口号有效。

  • 修复了使用加密v39.0.0时的弃用警告。

  • 删除了 <4Requires-Python 打包元数据字段。

1.26.12(2022-08-22)#

  • 不推荐使用 urllib3[secure] extra and the urllib3.contrib.pyopenssl module. Both will be removed in v2.x. See this GitHub issue 以获得有关如何迁移的理由和信息。

1.26.11(2022-07-25)#

  • 修复了在调用中读取超过2 GiB的问题 HTTPResponse.read 会引发一个 OverflowError 在Python3.9和更早版本上。

1.26.10(2022-07-07)#

  • 删除了对Python3.5的支持

  • 修复了以下问题: ProxyError 即使未配置HTTPS代理,也可能会出现将代理配置为HTTP而不是HTTPS的建议。

1.26.9(2022-03-16)#

  • 变化 urllib3[brotli] 更有利于安装仍在接收更新的Brotli库,如 brotlibrotlicffi 而不是 brotlipy 。此更改不会影响urllib3的行为,只会影响安装的依赖项。

  • 修复了在以下情况下的套接字泄漏 HTTPSConnection.connect() 引发异常。

  • 固定 server_hostname 被转发自 PoolManagerHTTPConnectionPool 请求HTTP URL时。应仅在请求HTTPS URL时转发。

1.26.8(2022-01-07)#

  • 添加了额外的消息到 urllib3.exceptions.ProxyError 当urllib3检测到某个代理配置为使用HTTPS,但该代理本身似乎只使用HTTP时。

  • 添加了在由于连接池已满而丢弃连接时连接池的大小的说明。

  • 添加了对Python3.11的显式支持。

  • 不推荐使用 Retry.MAX_BACKOFF 支持的类属性 Retry.DEFAULT_MAX_BACKOFF 以更好地匹配其余默认参数名称。 Retry.MAX_BACKOFF 在v2.0中已删除。

  • 受让人所在地变更 ssl.match_hostname 函数来源 urllib3.packages.ssl_match_hostnameurllib3.util.ssl_match_hostname 以确保下游发行商重新打包后的Python3.10+兼容性。

  • 修正了绝对导入,所有导入现在都是相对的。

1.26.7(2021-09-22)#

  • 修复了HTTPS主机名验证涉及IP地址和缺少SNI的错误。(第2400期)

  • 修复了在证书主机名匹配期间IPv6大括号未被剥离的错误。(问题#2240)

1.26.6(2021-06-25)#

  • 不推荐使用 urllib3.contrib.ntlmpool 模块。由于以下原因,urllib3无法正确支持它 reasons listed in this issue 。如果您是此模块的用户,请留言。

  • 变化 HTTPConnection.request_chunked() 为了不错误地发射多个 Transfer-Encoding 标头在已指定标头的情况下。

  • 修复了推荐的弃用消息中的拼写错误 Retry.DEFAULT_ALLOWED_METHODS

1.26.5(2021-05-26)#

  • 修复了Python3.10中发出的弃用警告。

  • 更新后的供应商 six 库升级到1.16.0。

  • 改进了拆分授权组件时URL解析器的性能。

1.26.4(2021-03-15)#

  • 更改了默认设置的行为 SSLContext 在HTTPS请求期间连接到HTTPS代理时。默认设置 SSLContext 现在集 check_hostname=True

1.26.3(2021-01-26)#

  • 修复了报头的字节和字符串比较问题(拉入#2141)

  • 变化 ProxySchemeUnknown 如果用户提供不带方案的代理URL,则错误消息的可操作性更强。(拉动#2107)

1.26.2(2020-11/12)#

  • 修复了以下问题 wrap_socketCERT_REQUIRED 在Python2.7.8及更早版本上无法正确导入(Pull#2052)

1.26.1(2020-11/11)#

  • 修复了两个 User-Agent 如果设置了 User-Agent 标头键作为 bytes (拉动#2047)

1.26.0(2020-11/10)#

  • NOTE: urllib3 v2.0 will drop support for Python 2Read more in the v2.0 Roadmap

  • 添加了对HTTPS代理联系HTTPS服务器的支持(拉号1923、拉号1806)

  • 默认情况下,不推荐协商TLSv1和TLSv1.1。如果用户仍希望使用1.2版之前的TLS而不发出弃用警告,则应通过设置 ssl_version=ssl.PROTOCOL_TLSv1_1 (拉动#2002) Starting in urllib3 v2.0: Connections that receive a ``DeprecationWarning`` will fail

  • 已弃用 Retry 选项 Retry.DEFAULT_METHOD_WHITELISTRetry.DEFAULT_REDIRECT_HEADERS_BLACKLISTRetry(method_whitelist=...) 赞成 Retry.DEFAULT_ALLOWED_METHODSRetry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT ,以及 Retry(allowed_methods=...) (拉动#2000) Starting in urllib3 v2.0: Deprecated options will be removed

  • 添加了默认设置 User-Agent 每个请求的标头(Pull#1750)

  • 增列 urllib3.util.SKIP_HEADER 用于跳过 User-AgentAccept-Encoding ,以及 Host 防止随请求自动发送标头(Pull#2018)

  • 坍塌 transfer-encoding: chunked 请求数据并将其成帧到同一 socket.send() 呼叫(Pull#1906)

  • 发送 http/1.1 默认情况下,每次TLS握手时的ALPN标识符(Pull#1894)

  • CA验证失败时正确终止SecureTransport连接(Pull#1977)

  • 不要发出 SNIMissingWarning 当经过的时候 server_hostname=None 到SecureTransport(拉#1903)

  • 已禁用请求TLSv1.2会话票证,因为它们未被urllib3使用(拉#1970)

  • 抑制 BrokenPipeError 在服务器关闭套接字后写入请求正文时(Pull#1524)

  • 包好 ssl.SSLError 可以通过将套接字(例如“错误的MAC”)读入 urllib3.exceptions.SSLError (拉动#1939)

1.25.11(2020-10/19)#

  • 修复解析自的重试退避时间 Retry-After 以HTTP日期格式给出时的标头。HTTP日期被解析为本地时区,而不是考虑到HTTP日期中的时区(通常为UTC)(拉#1932、拉#1935、拉#1938、拉#1949)

  • 修复了在以下情况下会引发错误的问题 SSLKEYLOGFILE 环境变量设置为空字符串。现在 SSLContext.keylog_file 没有设置在这种情况下(Pull#2016)

1.25.10(2020-07-22)#

  • 添加了对以下各项的支持 SSLKEYLOGFILE 用于记录TLS会话密钥的环境变量,与Wireshark等程序配合使用以解密捕获的Web流量(Pull#1867)

  • 修复了由于新的动态链接器缓存而在MacOS Big Sur上加载SecureTransport库的问题(拉#1905)

  • 将分块的请求体数据和框架折叠到一个调用中,以 send() 将TCP数据包数减少到原来的1/2-1/4(拉#1906)

  • 不插入 None vt.进入,进入 ConnectionPool 请求连接时池是否为空(Pull#1866)

  • 避免 hasattr 呼入 BrotliDecoder.decompress() (拉动#1858)

1.25.9(2020-04-16)#

  • 增列 InvalidProxyConfigurationWarning 在错误地指定HTTPS代理URL时引发。Urllib3目前不支持连接到HTTPS代理,但很快就能连接到HTTPS代理,我们希望用户能够在不造成太大破坏的情况下正确迁移。

    看见 this GitHub issue 有关如何修复代理配置的更多信息。(拉动#1851)

  • 排出后的连接 PoolManager 重定向(拉入#1817)

  • 确保 load_verify_locations 加薪 SSLError 针对所有后端(Pull#1812)

  • 改名 VerifiedHTTPSConnectionHTTPSConnection (拉动#1805)

  • 允许将CA证书数据作为字符串传递(Pull#1804)

  • 加薪 ValueError 如果方法包含控制字符(Pull#1800)

  • 增列 __repr__Timeout (拉动#1795)

1.25.8(2020-01-20)#

  • 放弃对EOL Python3.4的支持(拉入#1774)

  • OPTIMIZE_ENCODE_INVALID_CHARS(Pull#1787)

1.25.7(2019-11-11)#

  • 保留 chunked 重试时的参数(Pull#1715、Pull#1734)

  • 允许取消设置 SERVER_SOFTWARE 在App Engine中(拉入#1704,问题#1470)

  • 修复了在请求目标内发送URL片段的问题。(拉动#1732)

  • 修复了URL中的空查询部分无法解析的问题。(拉动#1732)

  • 由于Apple删除了对SecureTransport的支持,因此删除了对TLS 1.3的支持(拉号1703)

1.25.6(2019-09-24)#

  • 修复波浪线的问题 (~ )字符在路径中以错误的百分比编码。(拉动#1692)

1.25.5(2019-09-19)#

  • 添加对影响PYTHON<3.7.4和OPENSSL1.1.1+的bpo-37428的缓解,这会导致在使用时启用证书验证 cert_reqs=CERT_NONE 。(问题#1682)

1.25.4(2019-09-19)#

  • 将后重试标头设置传播到后续重试。(拉动#1607)

  • 修复了边缘情况,即使明确选择退出后重试标头仍会受到尊重。(拉动#1607)

  • 消除对…的依赖 rfc3986 用于URL解析。

  • 修复URL中包含无效字符的问题 Url.auth 将引发异常,而不是对这些字符进行百分比编码。

  • 添加对以下各项的支持 HTTPResponse.auto_close = False 这使得HTTP响应可以很好地与BufferedReaders和其他 io 模块功能。(拉动#1652)

  • 百分比-对URL中的无效字符进行编码 HTTPConnectionPool.request() (拉动#1673)

1.25.3(2019-05-23)#

  • 变化 HTTPSConnection 在以下情况下加载系统CA证书 ca_certsca_cert_dir ,以及 ssl_context 都没有具体说明。(拉动#1608,问题#1603)

  • 将捆绑的rfc3986升级到v1.3.2。(拉动#1609,问题#1605)

1.25.2(2019-04-28)#

  • 变化 is_ipaddress 不检测IPv6未来地址。(拉动#1583)

  • 变化 parse_url 对路径、查询和目标组件中的无效字符进行百分比编码。(拉动#1586)

1.25.1(2019-04-24)#

  • 添加对谷歌的支持 Brotli 包裹。(拉力#1572,拉力#1579)

  • 将捆绑的rfc3986升级到v1.3.1(Pull#1578)

1.25(2019-04-22)#

  • 使用HTTPS时,默认情况下需要并验证证书(Pull#1507)

  • 升级 urllib3.utils.parse_url() 符合RFC 3986标准。(拉动#1487)

  • 添加了对以下各项的支持 key_passwordHTTPSConnectionPool 要使用加密的 key_file 而不是创建自己的 SSLContext 对象。(拉动#1489)

  • 向CPython、pyOpenSSL和SecureTransport添加TLSv1.3支持 SSLContext 实施。(拉动#1496)

  • 已将默认的多部分标题编码器从RFC 2231切换为HTML5工作草案。(问题#303,拉动#1492)

  • 修复了在提供加密的客户端私钥但没有提供密码的情况下OpenSSL将被阻止的问题。相反,一个 SSLError 都被养大了。(拉动#1489)

  • 添加了对Brotli内容编码的支持。如果满足以下条件,则自动启用该功能 brotlipy 已安装程序包,可以使用以下命令请求 urllib3[brotli] 额外的。(拉动#1532)

  • 从默认的TLS加密套件中丢弃使用DSS密钥交换的加密。改进使用SecureTransport时的默认密码。(拉动#1496)

  • 实施了更高效的 HTTPResponse.__iter__() 方法。(问题#1483)

1.24.3(2019-05-01)#

  • 为CVE-2019-9740应用修复。(拉动#1591)

1.24.2(2019-04-17)#

  • 在任何其他情况下,默认情况下不加载系统证书 ca_certsca_certs_dirssl_context 参数是指定的。

  • 在重定向到跨站点时,不区分大小写删除授权标头。(问题#1510)

  • 在证书的subjectAltName部分添加对IPv6地址的支持。(问题#1269)

1.24.1(2018-11-02)#

  • 删除中的二次方行为 GzipDecoder.decompress() (1467期)

  • 恢复的功能 ciphers 的参数 create_urllib3_context() 。(问题#1462)

1.24(2018-10-16)#

  • 允许在初始化池管理器时指定KEY_SERVER_HOSTNAME,以允许覆盖自定义SNI。(拉动#1449)

  • 在AppVeyor上针对Python3.7进行测试。(拉动#1453)

  • 在App Engine上运行时的提前输出IPv6检查。(拉动#1450)

  • 更改退避因子的模棱两可的描述(Pull#1436)

  • 添加处理多个内容编码的功能(问题#1441和拉动#1442)

  • 跳过在使用pyOpenSSL时无法对其进行Idna解码的域名(问题#1405)。

  • 向HTTPSConnection添加一个SERVER_HOSTNAME参数,该参数允许覆盖握手中发送的SNI主机名。(拉动#1397)

  • 放弃对EOL Python2.6的支持(Pull#1429和Pull#1430)

  • 修复了标题为Content-Type:Message/*的响应错误引发HeaderParsingError,导致记录警告。(拉动#1439)

  • 将urllib3移动到src/urllib3(拉#1409)

1.23(2018-06-04)#

  • 允许在重定向到其他主机时提供要从请求中剥离的标头列表。默认设置为 Authorization 标题。可以通过设置不同的标头 Retry.remove_headers_on_redirect 。(问题#1316)

  • 修整 util.selectors._fileobj_to_fd 接受 long (问题#1247)。

  • 放弃了对Python3.3的支持。(拉动#1242)

  • 在对分块的Head响应调用stream()或Read_Chunked()时,将连接放回池中。(问题#1234)

  • 修复了客户端尝试通过证书+链进行身份验证时的特定于pyOpenSSL的SSL客户端身份验证问题(问题#1060)

  • 将端口添加到连接池连接打印(拉#1251)

  • 不要使用 uuid 模块来创建多部分数据边界。(拉动#1380)

  • read_chunked() 对于关闭的响应,不返回任何块。(问题#1088)

  • 将对Python2.6的支持添加到 contrib.securetransport (拉动#1359)

  • 添加了对SOCKS代理URL中的身份验证信息的支持(拉号1363)

1.22(2017-07-20)#

  • 修复了中缺少的方括号 HTTP CONNECT 通过IPv6代理连接到IPv6地址时。(问题#1222)

  • 已在上重试连接池 SSLError 。原版 SSLError 在以下位置提供 MaxRetryError.reason 。(第1112期)

  • 在重试/重定向时递归之前,排出并释放连接。修复了阻塞连接池的死锁。(1167期)

  • 修复了cookiejar的兼容性。(问题#1229)

  • Pyopenssl:使用提供的版本 six 。(问题#1231)

1.21.1(2017-05-02)#

  • 修复了可能导致响应正文传递长时间延迟的SecureTransport问题。(拉动#1154)

  • 修复了1.21中的回归,该回归在用户通过 socket_options 将标志添加到 PoolManager 。(1165期)

  • 修复了1.21中的回归,该回归在用户通过 assert_hostnameassert_fingerprint 将标志添加到 PoolManager 。(拉动#1157)

1.21(2017-04-25)#

  • 改进了某些选择器系统调用在Python3.5及更高版本上的性能。(拉动#1095)

  • 解决了在发送数据时,PyOpenSSL后端不会适当包装SysCallError异常的问题。(拉动#1125)

  • 选择器现在在导入补丁选择模块的模块(如Eventlet、Greenlet)后检测到猴子补丁的选择模块。(拉动#1128)

  • 减少了流传输zlib压缩的响应时的内存消耗(而不是原始的放气流)。(拉动#1129)

  • 连接池现在在构造池键时使用整个请求上下文。(拉动#1016)

  • PoolManager.connection_from_* 方法现在接受新的关键字参数, pool_kwargs ,它们与现有的 connection_pool_kw 。(拉动#1016)

  • 添加以下项的重试计数器 status_forcelist 。(1147期)

  • 增列 contrib 在MacOS上使用SecureTransport的模块: urllib3.contrib.securetransport 。(拉动#1122)

  • Urllib3现在只正常化 http://https:// 方案:对于它不承认的方案,它假定它们区分大小写,并保持不变。(问题#1080)

1.20(2017-01-19)#

  • 添加了对使用SELECT以外的选择器等待I/O的支持,改进了urllib3在具有大量并发连接的情况下的S行为。(拉动#1001)

  • 已更新系统时钟检查的日期。(问题#1005)

  • ConnectionPool现在正确地认为主机名不区分大小写。(问题#1032)

  • 现在,过时的版本会导致在注入时而不是在第一次使用时导致PyOpenSSL Conrib模块失败。(拉动#1063)

  • 过时的加密版本现在会导致在注入时而不是在第一次使用时导致PyOpenSSLConrib模块失败。(问题#1044)

  • 当请求被重试或重定向时,自动尝试回放类似文件的正文对象。(拉动#1039)

  • 修复了模块不小心修补队列模块时出现的一些错误。(拉动#1061)

  • 防止在请求方法不在方法白名单中的读取超时时重试。(问题#1059)

  • 更改了PyOpenSSL Conrib模块以延迟加载Idna,以避免不需要它的程序的内存不必要地膨胀。(拉动#1076)

  • 添加对带有区域标识符的IPv6文字的支持。(拉动#1013)

  • 添加了使用SOCKS代理时对socks5h://和socks4a://方案的支持,并适当地控制了远程DNS。(问题#1035)

1.19.1(2016-11-16)#

  • 修复了在Python3.5上不起作用的AppEngine导入。(拉动#1025)

1.19(2016-11-03)#

  • 在使用默认重试逻辑时,urllib3现在尊重413、429和503响应上的后重试标头。(拉动#955)

  • 从setup.py中删除标记以帮助旧的setupTools版本。(问题#986)

  • 不允许在URL端口中使用上标和其他整型符号。(问题#989)

  • 允许urllib3‘S HTTPResponse.stream()方法继续使用非Httplib底层FP。(拉动#990)

  • 现在,多部分标头中的空文件名将按原样发出,而不是被抑制。(问题#1015)

  • 在分块上载中首选用户提供的主机头。(第1009期)

1.18.1(2016-10-27)#

  • CVE-2016-9015。将urllib3版本1.17或1.18与PyOpenSSL注入和OpenSSL 1.1.0一起使用的用户 must 升级到此版本。此版本修复了一个漏洞,在该漏洞中,上述配置中的urllib3将由于错误地在OpenSSL中设置无效标志而无法自动验证TLS证书 SSL_CTX_set_verify 功能。这些错误的标志在OpenSSL1.1.0之前的版本中不会造成问题,该版本将任何标志的存在解释为请求证书验证。

    这个补丁没有公关,因为它是为同时披露和发布而准备的。主分支在Pull#1010中收到了相同的修复。

1.18(2016-09-26)#

  • 修复了InCompleRead异常的错误消息。(拉动#973)

  • 接受 iPAddress TLS证书中的使用者备用名称字段。(第258期)

  • 固定的一致性 HTTPResponse.closed 在 Python 2和3之间。(问题#977)

  • 修复了使用PyOpenSSL时对通配符证书的处理。(问题#979)

1.17(2016-09-06)#

  • 接受 SSLContext 用于SSL/TLS协商的对象。(问题#835)

  • ConnectionPool调试日志现在包括方案、主机和端口。(问题#897)

  • 对文档进行了大幅重构。(问题#887)

  • 在AppEngine上使用了URLFetch默认超时,而不是硬编码我们自己的超时。(问题#858)

  • 规范URL解析器中的方案和主机(问题#833)

  • HTTPResponse 包含最后一个 Retry 对象,该对象现在还包含重试历史记录。(问题#848)

  • 超时不能再设置为布尔值,必须大于零。(拉动#924)

  • 从用于PyOpenSSL的依赖项中删除了pyasn1和ndg-httpsclient。我们现在使用密码学和IDNA,这两者都已经是PyOpenSSL的依赖项。(拉动#930)

  • 修复了中的无限循环 stream 当AMT=None时。(问题#928)

  • 尝试使用操作系统的证书 SSLContext 。(拉动#941)

  • 更新了密码套件列表,以允许ChaCha20+Poly1305。AES-GCM比ChaCha20更受欢迎,但ChaCha20比其他任何物质都更受欢迎。(拉动#947)

  • 更新了密码套件列表,删除了基于3DES的密码套件。(拉动#958)

  • 已删除加密套件回退以允许高加密。(拉动#958)

  • 已实施 length_remaining 以确定要阅读的剩余内容。(拉动#949)

  • 已实施 enforce_content_length 以在收到不完整的数据区块时启用异常。(拉动#949)

  • 已从INFO中删除要调试的连接启动、连接重置、重定向、强制重试和新的HTTPS连接日志级别。(拉动#967)

1.16(2016-06-11)#

  • 当IPv6连接不可能时,禁用IPv6 DNS。(问题#840)

  • 提供 key_fn_by_scheme 可被覆盖的池键控机制。(问题#830)

  • 将池键的方案和主机标准化为小写,包括 source_address 。(问题#830)

  • Python3中更清晰的异常链 _make_request 。(问题#861)

  • 固定安装 urllib3[socks] 额外的。(问题#864)

  • 已修复的签名 ConnectionPool.close 所以它实际上可以被子类安全地调用。(问题#873)

  • 保留 release_conn 重试时的状态。(问题#651、#866)

  • 添加可自定义的 HTTPConnectionPool.ResponseCls ,它缺省为 HTTPResponse 但是可以用子类替换。(问题#879)

1.15.1(2016-04-11)#

  • 修复包装以包含后端口模块。(问题#841)

1.15(2016-04-06)#

  • 添加重试(RAISE_ON_STATUS=FALSE)。(问题#720)

  • 始终使用setupTools,不再使用distutils回退。(问题#785)

  • 已放弃对Python3.2的支持。(问题#786)

  • 使用请求时的分块传输编码 chunked=True 。(问题#790)

  • 修复了IPv6端口解析的回归问题。(第801期)

  • 追加SNIMissingWarning消息以允许用户在PYTHONWARNINGS环境变量中指定它。(问题#816)

  • 在PY2中处理Unicode标头。(问题#818)

  • 在主机名不匹配时记录证书。(问题#820)

  • 保持请求/响应报头的顺序。(问题#821)

1.14(2015-12-29)#

  • Conrib:支持SOCKS代理!(问题#762)

  • 修复了AppEngine对传输编码标头的处理以及超时默认检查中的错误。(问题#763)

1.13.1(2015-12-18)#

  • 修复了匹配主机名在IPv6+SSL中的回归问题。(问题#761)

1.13(2015-12-14)#

  • 固定 pip install urllib3[secure] 在现代的管子上。(第706期)

  • Pyopenssl:修复了ssl3_WRITE_PENDING错误。(问题#717)

  • Pyopenssl:支持TLSv1.1和TLSv1.2。(问题#696)

  • 在例外情况下,以更具防御性的方式密切联系。(问题#734)

  • 调整后的 read_chunked 在不反复刷新解码器的情况下处理压缩的、块编码的正文,以便在Jython上更好地运行。(问题#743)

  • 接受 ca_cert_dir 用于与SSL相关的PoolManager配置。(问题#758)

1.12(2015-09-03)#

  • 依赖于 six 用于导入 httplib 以解决与其他Python3填充符的冲突。(问题#688)

  • 添加对证书颁发机构目录的支持,如OpenSSL所支持的那样。(问题#701)

  • 新的例外: NewConnectionError ,当我们无法建立新连接时引发,通常 ECONNREFUSED 插座错误。

1.11(2015-07-21)#

  • 什么时候 ca_certs 给出了, cert_reqs 默认为 'CERT_REQUIRED' 。(第250期)

  • pip install urllib3[secure] 将以依赖项的形式安装certifI和PyOpenSSL。(问题#678)

  • 制造 HTTPHeaderDict 可用作 headers 输入值(问题#632、#679)

  • 增列 urllib3.contrib.appengine 它有一个 AppEngineManager 用于使用 URLFetch 在Google AppEngine环境中。(问题#664)

  • Dev:新增AppEngine测试套件。(问题#631)

  • 修复使用PyOpenSSL时的性能回归问题。(问题#626)

  • 传递不正确的方案(例如 foo:// )将筹集 ValueError 而不是 AssertionError (目前向后兼容,但请迁移)。(问题#640)

  • 修复在请求过程中发生错误时池未被补充的问题 release_conn=False 。(问题#644)

  • 修复池-默认标头不适用于URL编码的请求,如GET。(问题#657)

  • 在Python3中,由于解析错误而跳过标头时出现的log.warning。(问题#642)

  • 如果读取过程中发生错误,则关闭并丢弃连接。(问题#660)

  • 修复IPv6代理的主机解析。(问题#668)

  • 单独的警告类型SubjectAltNameWarning,现在每个主机发出一次。(问题#671)

  • 修整 httplib.IncompleteRead 不会转换为 ProtocolError 在使用时 HTTPResponse.stream() (问题#674)

1.10.4(2015-05-03)#

  • 将测试迁移到Tornado 4。(问题#594)

  • 追加默认警告配置,而不是覆盖。(问题#603)

  • 修复流解码回归。(问题#595)

  • 修复跨保活连接丢失状态的分块请求。(问题#599)

  • 修复当块头响应没有身体时的挂起。(问题#605)

1.10.3(2015-04-21)#

  • 发射 InsecurePlatformWarning 当缺少SSLContext对象时。(问题#558)

  • 修复了被丢弃的重复标头键的回归。(问题#563)

  • Response.stream() 返回分块响应的生成器。(问题#560)

  • 在PyOpenSSL中设置等待套接字时的超时上限。(问题#585)

  • 在平台上工作,无需 ssl 用于纯HTTP请求的模块。(问题#587)

  • 停止依赖stdlib的默认密码列表。(问题#588)

1.10.2(2015-02-25)#

  • 修复重试时文件描述符泄漏的问题。(问题#548)

  • 已从默认密码列表中删除RC4。(问题#551)

  • 报头性能改进。(问题#544)

  • 修复了PoolManager不遵守重定向重试设置的问题。(问题#553)

1.10.1(2015-02-10)#

  • 池可以用作上下文管理器。(问题#545)

  • 不要重复使用出现SSLError错误的连接。(问题#529)

  • 当gzip解码一个空流时,不要失败。(问题#535)

  • 增加对指纹验证的sha256支持。(问题#540)

  • 修复了对包含逗号的标头值的处理。(问题#533)

1.10(2014-12-14)#

  • 已禁用SSLv3。(问题#473)

  • 增列 Url.url 属性返回组成的url字符串。(问题#394)

  • 已修复PyOpenSSL+GEvent WantWriteError 。(问题#412)

  • MaxRetryError.reason 将始终是一个例外,而不是字符串。(问题#481)

  • 修复了未被检测为超时的与SSL相关的超时。(问题#492)

  • PY3:使用 ssl.create_default_context() 如果可以的话。(问题#473)

  • 发射 InsecureRequestWarningevery 不安全的HTTPS请求。(问题#496)

  • 发射 SecurityWarning 当证书没有 subjectAltName 。(问题#499)

  • 关闭并丢弃出现与SSL相关的错误的套接字。(问题#501)

  • 手柄 body 参数输入 .request(...) 。(问题#513)

  • 使用HTTPS代理遵守超时。(问题#505)

  • PyOpenSSL:处理ZeroReturnError异常。(问题#520)

1.9.1(2014-09-13)#

  • 在绑定之前应用套接字参数。(问题#427)

  • 更仔细地检查类FP对象是否关闭。(问题#435)

  • 修复了一些未包含的开发相关文件的打包问题。(问题#440)

  • 允许执行 only 指纹验证。(问题#444)

  • 发射 SecurityWarning 如果系统时钟关闭。(问题#445)

  • 修复了PyOpenSSL与PyPy的兼容性。(第450期)

  • 固定 BrokenPipeErrorConnectionError 在PY3中处理。(问题#443)

1.9(2014-07-04)#

  • 在与开发相关的文件之间来回移动。如果您维护的是urllib3的发行版包,则可能需要进行调整。(问题#415)

  • 未经验证的HTTPS请求将在第一个请求时触发警告。查看我们的新版本 security documentation 了解更多细节。(问题#426)

  • 新的重试逻辑与 urllib3.util.retry.Retry 配置对象。(问题#326)

  • 所有引发的异常现在都应该包装在 urllib3.exceptions.HTTPException -扩展异常。(问题#326)

  • 启用重试的请求期间的所有错误都应包含在 urllib3.exceptions.MaxRetryError ,包括以前被豁免的与超时相关的例外。基本错误可以从 .reason 财产。(问题#326)

  • urllib3.exceptions.ConnectionError 已重命名为 urllib3.exceptions.ProtocolError 。(问题#326)

  • 响应读取过程中的错误(如InCompleRead)现在包含在 urllib3.exceptions.ProtocolError 。(问题#418)

  • 请求空主机将引发 urllib3.exceptions.LocationValueError 。(问题#417)

  • 通过SSL连接捕获读取超时为 urllib3.exceptions.ReadTimeoutError 。(问题#419)

  • 在连接之前应用套接字参数。(问题#427)

1.8.3(2014-06-23)#

  • 修复了在Python3.4.1中使用代理时的TLS验证。(问题#385)

  • 增列 disable_cache 选项以 urllib3.util.make_headers 。(问题#393)

  • 包好 socket.timeout 例外情况为 urllib3.exceptions.ReadTimeoutError 。(问题#399)

  • 修复了连接被错误重用的代理相关错误。(问题#366、#369)

  • 增列 socket_options 关键字参数,允许定义 setsockopt 配置新的插座。(第397期)

  • 已删除 HTTPConnection.tcp_nodelay 赞成 HTTPConnection.default_socket_options 。(第397期)

  • 固定 TypeError Python2.6.4中的错误。(问题#411)

1.8.2(2014-04-17)#

  • 修整 urllib3.util 不包括在套餐中。

1.8.1(2014-04-17)#

  • 修复HTTPS请求作为HTTP发出的AppEngine错误。(问题#356)

  • 不安装 dummyserver vt.进入,进入 site-packages 因为只有测试套件才需要它。(问题#362)

  • 添加了对指定 source_address 。(问题#352)

1.8(2014-03-04)#

  • 改进了URL解析 urllib3.util.parse_url (正确解析用户名中的‘@’,以及‘host name:’之类的空白端口)。

  • 新的 urllib3.connection 包含所有HTTPConnection对象的模块。

  • 几个 urllib3.util.Timeout -相关修复。还将构造函数签名更改为更合理的顺序。 [Backwards incompatible] (问题#252、#262、#263)

  • 使用 backports.ssl_match_hostname 如果已安装的话。(第274期)

  • 增列 .tell() 方法,以 urllib3.response.HTTPResponse 它返回到目前为止读取的字节数。(第277期)

  • 支持不带线程的平台。(第289期)

  • 扩展中的默认端口比较 HTTPConnectionPool.is_same_host 允许未指定端口的池被视为等于显式提供了端口80/443的HTTP/HTTPS URL。(第305期)

  • 改进了默认的SSL/TLS设置,以避免漏洞。(第309期)

  • 固定 urllib3.poolmanager.ProxyManager 连接错误时不重试。(问题#310)

  • 在非代理的套接字上禁用Nagle算法。请求的子集将发送整个HTTP请求的速度加快约200毫秒;但是,产生的一些TCP包将更小。(第254期)

  • 增加了中的最大SubjectAltNames数 urllib3.contrib.pyopenssl 在单个证书中从默认的64位增加到1024位。(问题#318)

  • 标头现在作为自定义传递和存储 urllib3.collections_.HTTPHeaderDict 对象,而不是普通的 dict 。(第329期、第333期)

  • 标题不再在Python3上败诉。(问题#236)

  • urllib3.contrib.pyopenssl 现在在注入时使用操作系统的默认CA证书。(问题#332)

  • 请求与 retries=False 将立即引发任何异常,而不将它们包装在 MaxRetryError 。(问题#348)

  • 修复了与SSL相关的故障导致的开放套接字泄漏。(第344期、第348期)

1.7.1(2013-09-25)#

  • 通过新功能添加了精细超时支持 urllib3.util.Timeout 班级。(第231期)

  • 修复了对Python3.4的支持。(问题#238)

1.7(2013-08-14)#

  • 现在,通过测试,更多的例外是可以腌制的。(第174期)

  • 修复了位置标头中相对URL的重定向问题。(第178期)

  • 支持中的相对URL Location: ... 标题。(第179期)

  • urllib3.response.HTTPResponse 现在继承自 io.IOBase 以获得类似于奖励文件的功能。(第187期)

  • 传球 assert_hostname=False 创建HTTPSConnectionPool时,将跳过对SSL连接的主机名验证。(问题#194)

  • 新方法 urllib3.response.HTTPResponse.stream(...) 它起到了发电机的作用 .read(...) 。(第198期)

  • IPv6 URL解析会强制将主机名括起来。(问题#199)

  • 修复了中的线程争用情况 urllib3.poolmanager.PoolManager.connection_from_host(...) (问题#204)

  • ProxyManager 请求现在包括中的非默认端口 Host: ... 标题。(第217期)

  • 在中添加了HTTPS代理支持 ProxyManager 。(问题#170#139)

  • 新的 RequestField object can be passed to the fields=... 可以指定标头的param。(第220期)

  • 加薪 urllib3.exceptions.ProxyError 连接到代理失败时。(第221期)

  • 在发布文件名时使用国际标头。(第119期)

  • 改进了对IPv6的支持。(第203期)

1.6(2013-04-25)#

  • Contrrib:可选的SNI支持,支持使用PyOpenSSL的PY2。(第156期)

  • ProxyManager 自动添加 Host: ... 标题(如果未给出)。

  • 改进了与SSL相关的代码。 cert_req 现在可以选择接受类似“Required”或“None”的字符串。同上 ssl_version 接受类似“SSLv23”的字符串,字符串值反映相应常量变量的后缀。(第130期)

  • 已售出 socksipy 现在基于Anorov的fork,它处理意外关闭的代理连接和更大的读取缓冲区。(第135期)

  • 确保在未收到数据时关闭连接,修复某些平台上的连接泄漏。(问题#133)

  • 添加了对Py32+上的SSL/TLS连接的SNI支持。(第89期)

  • 测试修复为再次与Py26兼容。(第125期)

  • 添加了通过传递 ssl.PROTOCOL_* 常量到 ssl_version 的参数 HTTPSConnectionPool 。(第109期)

  • 允许在编码文件字段时指定显式内容类型。(第126期)

  • 异常现在可以通过测试进行挑选。(第101期)

  • 修复了在某些情况下不传递默认标头的问题。(第99期)

  • 按照RFC 2616第3.5节的规定,将“Content-Coding”标头值视为不区分大小写。(第110期)

  • “连接被拒绝”SocketError将被重试而不是引发。(第92期)

  • 更新后的供应商 six ,不再覆盖全局 six 模块命名空间。(第113期)

  • urllib3.exceptions.MaxRetryError 包含一个 reason 属性,该属性包含提示最后重试的异常。如果 reason is None 然后,这是由于重定向。(第92期、第114期)

  • 固定 PoolManager.urlopen() 从不重定向不止一次。(第149期)

  • 不要假设 Content-Type: text/plain 用于不是文件的多部分编码参数。(第111期)

  • 经过 strict 参数向下至 httplib.HTTPConnection 。(第122期)

  • 添加了通过指纹(MD5、SHA1)或针对任意主机名(通过IP连接或针对错误配置的服务器)验证SSL证书的机制。(第140期)

  • 支持流解压缩。(第159期)

1.5(2012-08-02)#

  • 增列 urllib3.add_stderr_logger() 用于在urllib3中快速启用STDERR调试日志。

  • 中提供了本机完整URL解析(包括身份验证、路径、查询、片段) urllib3.util.parse_url(url)

  • 如果状态代码为303,内置重定向将把方法切换到‘GET’。(第11期)

  • urllib3.PoolManager 在发送请求URI之前剥离方案和主机。(第8期)

  • 新的 urllib3.exceptions.DecodeError 基于Content-Type标头的自动解码失败时例外。

  • 修复了池耗尽和连接泄漏的错误(问题#76)。添加了池逐出时显式关闭连接的功能。增列 urllib3.PoolManager.clear()

  • 99%->100%单元测试覆盖率。

1.4(2012-06-16)#

  • 与AppEngine相关的次要修复。

  • 切换自 mimetools.choose_boundaryuuid.uuid4()

  • 改进了URL解析。(第73期)

  • 支持IPv6 URL。(第72期)

1.3(2012-03-25)#

  • 删除了1.0之前的不推荐使用的API。

  • 将帮助器重构为 urllib3.util 子模块。

  • 修复了多部分编码,以支持具有多个值的键的元组列表。(第48期)

  • 修复了多个Set-Cookie标头在Python3中无法正确合并的问题。(问题#53)

  • 为AppEngine提供了对Py27的支持。(第61期)

  • 小调 encode_multipart_formdata 修复了与Python3字符串和字节相关的问题。

1.2.2(2012-02-06)#

  • 修复了不发货的包装错误 test-requirements.txt 。(第47期)

1.2.1(2012-02-05)#

  • 修复了与以下情况相关的另一个错误 ssl 模块不可用。(第41期)

  • 位置解析错误现在引发 urllib3.exceptions.LocationParseError 它继承自 ValueError

1.2(2012-01-29)#

  • 添加了对Python3的支持(在3.2.2上进行了测试)

  • 删除了对Python2.5的支持(在2.6.7、2.7.2上进行了测试)

  • 使用 select.poll 而不是 select.select 用于支持它的平台。

  • 使用 Queue.LifoQueue 而不是 Queue.Queue 以实现更积极的连接重用。可通过重写进行配置 ConnectionPool.QueueCls

  • 固定 ImportError 安装过程中出现以下情况 ssl 模块不可用。(第41期)

  • 固定 PoolManager 未正确完成方案之间的重定向(如HTTP->HTTPS)。(问题#28,在v1.1中的问题#10中发现)

  • 端口 dummyserver 使用 tornado 而不是 webob + eventlet 。删除了无关的、不受支持的虚拟服务器测试后端。添加了套接字级测试。

  • 更多的测试。解锁的成就:99%的覆盖率。

1.1(2012-01-07)#

  • 重构 dummyserver 到它自己的根命名空间模块(用于测试)。

  • 添加了以下项的主机名验证 VerifiedHTTPSConnection 由S在PY32‘中出售 ssl_match_hostname 。(第25期)

  • 修复了使用时跨主机的HTTP重定向 PoolManager 。(第10期)

  • 固定 decode_content 设置为时被忽略 urlopen 。(第27期)

  • 修复了与超时相关的错误。(问题#17、#23)

1.0.2(2011-11-04)#

  • 修复了中的打字错误 VerifiedHTTPSConnection 只有当您手动使用该对象时,它才会显示为错误。(谢谢皮奥斯)

  • 通过将访问日志包装在互斥锁中,使RecentlyUsedContainer(以及PoolManager)更具线程安全性。(谢谢@christer)

  • 使RecentlyUsedContainer更像字典(已更正 __delitem____getitem__ 行为),并进行测试。不应影响核心urllib3代码。

1.0.1(2011-10-10)#

  • 修复了一个错误,其中相同的连接将被返回到池中两次,导致无关的“HttpConnectionPool已满”日志警告。

1.0(2011-10-08)#

  • 增列 PoolManager 连接的LRU到期(测试和记录)。

  • 增列 ProxyManager (需要测试、文档和确认它与HTTPS代理一起工作)。

  • 在以下情况下为响应添加了可选的部分阅读支持 preload_content=False 。现在,您可以发出请求并只读取头文件,而无需加载内容。

  • 将响应解码设置为可选(默认打开,与之前相同)。

  • 添加了可选的显式边界字符串 encode_multipart_formdata

  • 便利性请求方法现在继承自 RequestMethods 。老帮手们喜欢 get_urlpost_url 应该放弃,取而代之的是新的 request(method, url, ...)

  • 重构代码,使其更具解耦性、可重用性和可扩展性。

  • 许可证标头已添加到 .py 档案。

  • 扩展了文档:在代码和文档中使用了大量对Sphinx友好的文档字符串 docs/ 在https://urllib3.readthedocs.io/.上

  • 所有的东西都变得更好了!

  • 开始写这个文件。

0.4.1(2011-07-17)#

  • 小错误修复,代码清理。

0.4(2011-03-01)#

  • 更好的Unicode支持。

  • 增列 VerifiedHTTPSConnection

  • 增列 NTLMConnectionPool 在巧妙地。

  • 小小的改进。

0.3.1(2010-07-13)#

  • 增列 assert_host_name 可选参数。现在与代理兼容。

0.3(2009-12-10)#

  • 添加了HTTPS支持。

  • 小错误修复。

  • 重构,打破了与0.2的向后兼容性。

  • 从此版本开始,API将被视为稳定。

0.2(2008-11-17)#

  • 添加了单元测试。

  • 错误修复。

0.1(2008-11-16)#

  • 第一次发布。