更改日志#
2.0.5(2023-09-20)#
2.0.4(2023-07-19)#
2.0.3(2023-06-07)#
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)#
2.0.0(2023-04-26)#
请阅读 v2.0 migration guide 有关升级到最新版本的urllib3的帮助。
已删除#
删除了证书上的回退
commonName
inmatch_hostname()
function. This behavior was deprecated in May 2000 in RFC 2818. Instead onlysubjectAltName
is used to verify the hostname by default. To enable verifying the hostname againstcommonName
useSSLContext.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
optionsmethod_whitelist
,DEFAULT_REDIRECT_HEADERS_BLACKLIST
(#2086 )。已删除
urllib3.HTTPResponse.from_httplib
(#2648 )。删除的默认值为
None
for therequest_context
parameter ofurllib3.PoolManager.connection_from_pool_key
. This change should have no effect on users as the default value ofNone
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 thatfrom urllib3 import request
imported the top-levelrequest()
function instead of theurllib3.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 moduleurllib3.util.ssl_
(#2168 )。已删除
urllib3.exceptions.SNIMissingWarning
(#2168 )。删除了
_prepare_conn
method fromHTTPConnectionPool
. Previously this was only used to callHTTPSConnection.set_cert()
byHTTPSConnectionPool
(#1985 )。已删除
tls_in_tls_required
property fromHTTPSConnection
. This is now determined from thescheme
parameter inHTTPConnection.set_tunnel()
(#1985 )。删除了
strict
parameter/attribute fromHTTPConnection
,HTTPSConnection
,HTTPConnectionPool
,HTTPSConnectionPool
, andHTTPResponse
(#2064 )。
已弃用#
已弃用
HTTPResponse.getheaders()
andHTTPResponse.getheader()
which will be removed in urllib3 v2.1.0. Instead useHTTPResponse.headers
andHTTPResponse.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 ofssl_minimum_version
.ssl_version
will be removed in urllib3 v2.1.0 (#2110 )。不推荐使用
strict
parameter ofPoolManager.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
andformat_header_param
in favor offormat_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 theHTTPSConnection
constructor (#1985 )。已弃用
HTTPConnection.request_chunked()
method which will be removed in urllib3 v2.1.0. Instead passchunked=True
toHTTPConnection.request()
(#1985 )。
增列#
增加了顶层
urllib3.request
function which uses a preconfigured module-globalPoolManager
instance (#2150 )。添加了
json
parameter tourllib3.request()
,PoolManager.request()
, andConnectionPool.request()
methods to send JSON bodies in requests. Using this parameter will set the headerContent-Type: application/json
ifContent-Type
isn't already defined. Added support for parsing JSON response bodies withHTTPResponse.json()
method (#2243 )。将类型提示添加到
urllib3
module (#1897 )。增列
ssl_minimum_version
andssl_maximum_version
options which setSSLContext.minimum_version
andSSLContext.maximum_version
(#2110 )。在以下情况下添加了对Z标准(RFC 8878)的支持
zstandard
1.18.0 or later is installed. Added thezstd
extra which installs thezstandard
package (#1992 )。增列
urllib3.response.BaseHTTPResponse
class. All future response classes will be subclasses ofBaseHTTPResponse
(#2083 )。增列
FullPoolError
which is raised whenPoolManager(block=True)
and a connection is returned to a full pool (#2197 )。增列
HTTPHeaderDict
to the top-levelurllib3
namespace (#2216 )。添加了对使用HTTPHeaderDict配置标题合并行为的支持
HTTPHeaderDict
to provide headers for a request, by default duplicate header values will be repeated. But ifcombine=True
is passed into a call toHTTPHeaderDict.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
andproxy_assert_fingerprint
kwargs toProxyManager
(#2409 )。添加了可配置的
backoff_max
parameter to theRetry
class. If a custombackoff_max
is provided to theRetry
class, it will replace theRetry.DEFAULT_BACKOFF_MAX
(#2494 )。添加了
authority
property to the Url class as per RFC 3986 3.2. This property should be used in place ofnetloc
for users who want to include the userinfo (auth) component of the URI (#2520 )。添加了
scheme
parameter toHTTPConnection.set_tunnel
to configure the scheme of the origin being tunnelled to (#1985 )。添加了
is_closed
,is_connected
andhas_connected_to_proxy
properties toHTTPConnection
(#1985 )。添加了可选选项
backoff_jitter
parameter toRetry
. (#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 settingdecode_content=False
(#2128 )。变化
urllib3.HTTPConnection.getresponse
to return an instance ofurllib3.HTTPResponse
instead ofhttp.client.HTTPResponse
(#2648 )。变化
ssl_version
to instead set the correspondingSSLContext.minimum_version
andSSLContext.maximum_version
values. Regardless ofssl_version
passedSSLContext
objects are now constructed usingssl.PROTOCOL_TLS_CLIENT
(#2110 )。更改的默认设置
SSLContext.minimum_version
to beTLSVersion.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 fromSSLError
toImportError
(#2589 )。变化
HTTPConnection.request()
to always use lowercase chunk boundaries when sending requests withTransfer-Encoding: chunked
(#2515 )。变化
enforce_content_length
default to True, preventing silent data loss when reading streamed responses (#2514 )。已更改内部实施
HTTPHeaderDict
to usedict
instead ofcollections.OrderedDict
for better performance (#2080 )。更改了
urllib3.contrib.pyopenssl
module to wrapOpenSSL.SSL.Error
withssl.SSLError
inPyOpenSSLContext.load_cert_chain
(#2628 )。已更改不推荐使用的用法
socket.error
toOSError
(#2120 )。中的所有参数已更改
HTTPConnection
andHTTPSConnection
constructors to be keyword-only excepthost
andport
(#1985 )。变化
HTTPConnection.getresponse()
to set the socket timeout fromHTTPConnection.timeout
value before reading data from the socket. This previously was done manually by theHTTPConnectionPool
callingHTTPConnection.sock.settimeout(...)
(#1985 )。更改了
_proxy_host
property to_tunnel_host
inHTTPConnectionPool
to more closely match how the property is used (value inHTTPConnection.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 byHTTPSConnectionPool
(#2537 )。更改了默认设置
blocksize
to 16KB to match OpenSSL's default read amounts (#2348 )。变化
HTTPResponse.read()
to raise an error when calling withdecode_content=False
after usingdecode_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 ifHTTPConnection.timeout
is updated before sending the next request the new timeout value will be used (#2645 )。固定
socket.error.errno
when raised from pyOpenSSL'sOpenSSL.SSL.SysCallError
(#2118 )。修正了缺省值
HTTPSConnection.socket_options
to matchHTTPConnection
(#2213 )。修复了以下位置的错误
headers
would be modified by theremove_headers_on_redirect
feature (#2272 )。修复了中的引用周期错误
urllib3.util.connection.create_connection()
(#2277 )。修复了以下情况下的套接字泄漏
HTTPConnection.connect()
fails (#2571 )。固定
urllib3.contrib.pyopenssl.WrappedSocket
andurllib3.contrib.securetransport.WrappedSocket
close methods (#2970 )
1.26.16(2023-05-23)#
修复了在访问
PoolManager
具有多个不同来源的连接将导致在请求进行时关闭连接池 (#2954 )
1.26.15(2023-03-10)#
1.26.14(2023-01-11)#
1.26.13(2022-11-23)#
不推荐使用
HTTPResponse.getheaders()
和HTTPResponse.getheader()
方法:研究方法。修复了端口中带有前导零的URL的解析将被拒绝的问题,即使删除零后的端口号有效。
修复了使用加密v39.0.0时的弃用警告。
删除了
<4
在Requires-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库,如brotli
和brotlicffi
而不是brotlipy
。此更改不会影响urllib3的行为,只会影响安装的依赖项。修复了在以下情况下的套接字泄漏
HTTPSConnection.connect()
引发异常。固定
server_hostname
被转发自PoolManager
至HTTPConnectionPool
请求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_hostname
至urllib3.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_socket
和CERT_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 2 。 Read 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_WHITELIST
,Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST
和Retry(method_whitelist=...)
赞成Retry.DEFAULT_ALLOWED_METHODS
,Retry.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-Agent
,Accept-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)改名
VerifiedHTTPSConnection
至HTTPSConnection
(拉动#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_certs
,ca_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_password
为HTTPSConnectionPool
要使用加密的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_certs
,ca_certs_dir
或ssl_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_hostname
或assert_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)发射
InsecureRequestWarning
为 every 不安全的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期)
固定
BrokenPipeError
和ConnectionError
在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 thefields=...
可以指定标头的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_boundary
至uuid.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_url
和post_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)#
第一次发布。