python - Python 请求模块中的 SSL 证书错误,但 VBA 中没有
问题描述
我正在尝试向公司的 Intranet 页面发送请求,如下所示:
import requests
http_proxy = 'some_proxy1'
https_proxy = 'some_proxy2'
URL = 'some_url'
proxyDict = {
"http" : some_proxy1,
"https" : some_proxy2
}
response = requests.get(some_url, proxies=proxyDict, verify=False)
即使verify
设置为False
,我得到
SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert bad certificate')],)",)
该代码适用于外部页面。
奇怪的是,我通过 VBA 尝试了相同的请求(但没有代理),它可以工作:
Sub request()
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "some_url"
objHTTP.Open "GET", URL, False
objHTTP.send
Debug.Print objHTTP.responseText
end sub
我可以做些什么来使 Python 代码正常工作吗?
为什么 VBA 对 SSL 证书没有问题?是因为它以某种方式事先知道它 - 因为它是 Windows 原生的 - 并且不需要验证?
解决方案
SSLError: ("糟糕的握手: 错误([('SSL 例程', 'ssl3_read_bytes', 'sslv3 alert bad certificate')],)",)
这可能意味着服务器希望您使用客户端证书进行身份验证。我的猜测是特定证书在 Windows 证书存储中,并且将由您的 VB 脚本自动使用,就像浏览器自动使用它一样。只是,Python 不使用 Windows 证书存储。这意味着您需要以某种方式从存储中提取特定证书,并将它们明确用作 Python 程序中记录的客户端证书。
推荐阅读
- mongodb - Spring Boot Mongodb:时区的聚合和投影问题
- php - 颤振解密字符串,用 PHP 加密
- gtkmm - 如何使用 Gio::Settings 创建自定义快捷方式?
- python - 另一个列表的列表值只有在它是嵌套列表时才会改变
- python - 为较低的数字生成概率较高的随机自然数?
- php - PHP password_hash 不能跨浏览器或机器工作并返回 null
- arduino - 使用 Arduino 提供逻辑状态作为启用引脚的 74HCT4066 操作问题
- python - 标准化不同的日期格式
- python - ImportError:无法从“sklearn.utils”导入名称“safe_indexing”
- javascript - 当我的鼠标移动到图片的某个区域时,如何显示新图片?