ValueError: check_hostname requires server_hostname
时间: 2023-11-13 15:44:51 浏览: 6
这个错误通常是由于使用了 Python 中的 SSL/TLS 连接时没有传入正确的参数导致的。具体来说,是因为 `check_hostname` 参数需要传入 `server_hostname` 参数,但是 `server_hostname` 参数没有被正确设置。
解决这个问题的方法是在创建 SSL/TLS 连接时,设置 `server_hostname` 参数。例如,在使用 `urllib` 库发送 HTTPS 请求时,可以这样设置:
```python
import urllib.request
import ssl
context = ssl.create_default_context()
context.check_hostname = True
context.verify_mode = ssl.CERT_REQUIRED
url = 'https://example.com'
with urllib.request.urlopen(url, context=context) as u:
response = u.read()
```
在上面的代码中,我们创建了一个 SSL/TLS 上下文对象 `context`,并将其 `check_hostname` 属性设置为 `True`,表示需要检查主机名。同时,我们将 `verify_mode` 属性设置为 `CERT_REQUIRED`,表示需要验证服务器证书。最后,我们在使用 `urlopen` 函数发送 HTTPS 请求时,将 `context` 作为参数传入,并且设置 `server_hostname` 参数为请求的主机名。
如果你使用其他的 SSL/TLS 库,也需要根据具体的库和使用场景进行相应的设置。