这段 VBA 调用看起来是在选择 proxyServer 中保存的代理:

http.setProxy 1, proxyServer, bypassList

对于 MSXML ServerXMLHTTP,第一个参数选择代理模式。文档记载的取值为:0 表示默认配置,1 表示直接连接,2 表示显式指定的代理。在 1 之后传入地址并不会把直接模式变成手动代理模式。

一个最小的手动代理示例是:

Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")
http.setProxy 2, "proxy.example:8080", "<local>"
http.Open "GET", "https://example.com/", False
http.send

示例中的端点是占位符。要检查公共代理,请将其替换为 HTTP 代理列表中的 HTTP 地址。第三个参数是绕过列表;这里的 <local> 使用了文档记载的本地名称例外。它不是第一个失败后要尝试的第二个代理。因此在那里填入另一个代理的 IP 和端口表达的是错误类型的设置。

在你的 VBA 引用公开这些常量的地方使用命名常量,或者在使用后期绑定时在本地定义相关常量,以便审查时能看清模式。

还要留意对象类型。ServerXMLHTTP、面向浏览器的 XMLHTTP 和 WinHttpRequest 是不同的 COM 接口。一个能用的示例并不能证明另一个的配置来源。一旦正确的对象选择了手动代理模式,就检查该路径上仍然存在的连接、身份验证或 TLS 错误。

相关文章