ValueError: check_hostname requires server_hostname 什么意思?怎么应对
时间: 2024-09-08 20:01:11 浏览: 39
python学习笔记-面向对象高级编程-20200324
`ValueError: check_hostname requires server_hostname` 这个错误通常出现在Python的`ssl`模块中,当你尝试验证HTTPS连接时,如果服务器名称(server_hostname)没有提供给`check_hostname`函数,它就会抛出这个错误。`check_hostname`是用来确保连接的目标主机名与证书中的主机名匹配的,这是HTTPS安全的一部分。
解决这个问题,你需要检查你的代码中是否有以下几种情况:
1. **使用`requests`库**:在发起HTTPS请求时,确保`verify=True`并且传递了正确的SSL证书路径,例如:
```python
import requests
response = requests.get('https://example.com', verify=True) # 你应该有合适的CA根证书
```
或者,如果你信任该网站并想禁用验证:
```python
response = requests.get('https://example.com', verify=False)
```
2. **自定义`ssl.create_default_context()`**:创建SSL上下文时,包含正确的主机名,例如:
```python
context = ssl.create_default_context()
context.check_hostname = True
context.verify_mode = ssl.CERT_REQUIRED
connection = http.client.HTTPSConnection('example.com', context=context)
```
如果你的程序是从用户输入或其他不可靠来源获取URL,记得先验证或清理输入,确保包含了有效的服务器名称。
阅读全文