我正尝试向公司的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固有的-不需要验证?
答案 0 :(得分:1)
SSLError :(“错误的握手:错误([['SSL例程”,“ ssl3_read_bytes”,“ sslv3警报错误证书”),)“)
这可能意味着服务器希望您使用客户端证书进行身份验证。我的猜测是,特定的证书位于Windows证书存储区中,并且将由您的VB脚本自动使用,与浏览器自动使用的相同。仅Python不使用Windows证书存储。这意味着您需要以某种方式从商店中提取特定证书,并将其明确用作Python程序as documented中的客户端证书。