在VBA中,我需要请求http消息并解析响应文本。我已经成功地获得了http状态为"200"的响应文本,但正文是加密的。(头不是)所以我一直在尝试解密消息,但由于对SSL概念和编程技能了解不足,我陷入了困境。
With oRequest
.Open "GET", sUrl, False
.SetRequestHeader "Accept", "*/*"
.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
.SetRequestHeader "Connection", "Keep -Alive"
'.SetClientCertificate ("HKEY_LOCAL_MACHINE/Software/Microsoft/SystemCertificates/CA/Certificates")
.Send
sResult = .GetAllResponseHeaders
Debug.Print sResult
sResult = .ResponseText
Debug.Print sResult
上面的剧本就是我写的。对此,我有一些问题。
1.是否需要"SetClientCertificate()"?我如何才能成功获得回复文本
- 正如我所搜索的,"SetClientCertificate()"是向服务器发送ssl消息的方法。但是,我已经在没有该方法的情况下成功地发送了一条消息(并得到了响应)。我不明白这是怎么回事
2.在VBA中,如何使用证书对响应体进行解码
- 我真的不知道如何解密响应文本。我知道我的本地计算机中有一个合适的证书,证书中的密钥可以用来解密消息,但我如何在VBA中做到这一点?我真的找不到任何关于这方面的有用文章
请让我知道我误解了什么,并给我任何解决问题的线索。
[+编辑]
在脚本中,有一行:
.SetRequestHeader "Accept-Encoding", "gzip , deflate"
我在问题中省略了这一行。因为我认为问题是关于SSL的,所以我故意删除了一些我猜测不是真正必要的行。(这完全是错误的)
去掉这条线就行了。
我成功地获得了http状态为"200"的响应文本,但正文是加密的。
这没有意义。在HTTPS中,所有内容都是加密的:请求标头和正文,以及响应标头和正文。我更希望你能得到解密的响应头和正文,但正文可能是压缩的,或者是你无法识别的格式,所以它看起来像是加密的。
是否需要"SetClientCertificate()"?我如何才能成功获得回复文本?
如果服务器要求客户端使用客户端证书对自己进行身份验证,则需要这样做。大多数网站都不需要这个。
在VBA中,如何使用证书对响应体进行解码
你不能。您所拥有的主体可能没有加密,或者至少没有使用与TLS(HTTPS)连接相关的任何内容进行加密(见上文)。