23

我正在使用 ServerXMLHTTP 对象在 excel 2007 vba 脚本上发出一些 http 请求。

但是我需要连接到使用自签名 SSL 证书的 https 服务器,所以默认情况下我会收到消息“证书颁发机构无效或不正确”。有没有办法配置 ServerXMLHTTP 对象,使其不需要 CA 证书?

一些示例代码如下:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
  objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
  objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
  objHTTP.send ("")
4

2 回答 2

39

我曾经有一段时间遇到过这个问题,但由于以下原因,我才设法解决了这个问题:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption 2, objHTTP.GetOption(2)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

我在这里找到了setOption 方法getOption 方法

在我刚刚使用的这段代码中SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS,您可以尝试使用其他更具体的代码:

  • SXH_SERVER_CERT_IGNORE_WRONG_USAGE
  • SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
  • SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
  • SXH_SERVER_CERT_IGNORE_UNKNOWN_CA
于 2012-07-22T12:42:14.273 回答
6
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

得到上述解决方案,只需稍作改动即可。代替:

objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

我用了:

objHTTP.SetOption(2) = (objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

否则我会收到以下错误:

Microsoft VBScript 编译错误 '800a0414' 调用 Sub objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 时不能使用括号

引用自: SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS

于 2014-03-28T19:10:59.317 回答