您的位置:

urllib3有ValueError("Can't specify both 'ssl_version' and either ""'ssl_minimum_version' or 'ssl_maximum_version'")报错是怎么回事

  发布时间:2025-03-26 21:07:43
urllib3出现数值错误ValueError的原因是尝试同时指定SSL版本和SSL最小或最大版本导致冲突。解决方案是选择一种TLS/SSL版本设置方式,推荐只指定'ssl_version'。示例代码展示了正确设置TLS/SSL协议版本避免错误。

问题原因

urllib3出现ValueError("Can't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'")的原因是由于在使用urllib3时尝试同时指定SSL版本(ssl_version)以及SSL最小版本或最大版本(ssl_minimum_version或ssl_maximum_version)。在urllib3中,ssl_version代表具体的SSL/TLS协议版本,而ssl_minimum_version和ssl_maximum_version则用于指定SSL/TLS的最小和最大版本范围。 由于SSL/TLS协议的设计,只能指定具体的SSL/TLS协议版本或者指定SSL/TLS的最小和最大版本范围,不能同时指定具体版本和版本范围。因此,当在urllib3中尝试同时指定这两种方式时,就会导致数值错误ValueError的异常抛出。

解决方案

urllib3出现ValueError("Can't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'")这个问题的原因是在使用urllib3时同时指定了'ssl_version'和'ssl_minimum_version'或'ssl_maximum_version',而这两者是相互冲突的。 要解决这个问题,需要根据具体情况选择一种TLS/SSL版本的设置方式。推荐的做法是只指定'ssl_version',而不指定'ssl_minimum_version'或'ssl_maximum_version',因为'ssl_version'可以精确指定使用的TLS/SSL协议版本,而'ssl_minimum_version'和'ssl_maximum_version'是用来指定可接受的最低和最高协议版本范围的。 以下是一个正确的示例,指定'ssl_version'为TLSv1.2:


import urllib3

http = urllib3.PoolManager(ssl_version=urllib3.util.ssl_.resolve_ssl_version("TLSv1.2"))
response = http.request('GET', 'https://example.com')
print(response.data)

通过以上代码示例,可以正确设置TLS/SSL协议版本,避免同时指定'ssl_version'和'ssl_minimum_version'或'ssl_maximum_version'而导致的数值错误。

具体例子

在使用urllib3时,出现ValueError("Can't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'")的错误是因为在配置SSL/TLS版本时,不能同时指定'ssl_version'和'ssl_minimum_version'或'ssl_maximum_version'。为了正确使用urllib3,需要根据具体情况选择其中一个选项进行配置。 下面是一个正确使用urllib3并避免该错误的例子:


import urllib3

# 创建urllib3 PoolManager对象
http = urllib3.PoolManager()

# 通过PoolManager对象发起GET请求
r = http.request('GET', 'https://www.example.com', 
                 ssl_version=urllib3.util.ssl.PROTOCOL_TLSv1_2)
print(r.data)

在上面的例子中,我们使用了ssl_version参数来指定使用的SSL/TLS版本为TLSv1.2。通过这种方式,我们避免了同时指定'ssl_version'和'ssl_minimum_version'或'ssl_maximum_version'而导致的错误。这样就可以正确使用urllib3发起HTTPS请求并指定所需的SSL/TLS版本。