【发布时间】:2020-01-04 00:40:34
【问题描述】:
我试图在我办公室的 Excel 中使用 VBA 发出 HTTP 请求,但它不起作用。我的办公室网络使用代理连接到互联网,因此 http 请求不会直接转到请求的 URL。
我在没有代理的情况下在家中尝试了以下代码(无需代理连接的代码),它运行良好。
当我在代码中设置代理(请参阅通过代理服务器连接的代码)并在我的办公室运行它时,它总是超时而无法到达请求的页面。 你能告诉我我的代码在哪里出错以及如何修复它。 请注意,我的办公室网络使用了一个我可以下载的 PAC 文件,其中包括函数 FindProxyForURL(url, host)。我从那里得到了代理服务器地址。
'Code to connect without proxy
Dim WHTTP As WinHttp.WinHttpRequest
Set WHTTP = New WinHttp.WinHttpRequest
WHTTP.Open "GET", "http://www.google.com", False
WHTTP.Send
x = WHTTP.ResponseText
Debug.Print x
'Code to connect via a proxy server
Dim WHTTP As WinHttp.WinHttpRequest
Dim proxy As String
Set WHTTP = New WinHttp.WinHttpRequest
proxy = "myoffice_proxy_IP:80"
WHTTP.Open "GET", "http://www.google.com", False
WHTTP.SetProxy HTTPREQUEST_PROXYSETTING_PROXY, proxy, ""
WHTTP.Send
x = WHTTP.ResponseText
Debug.Print x
【问题讨论】:
-
欢迎来到stackoverflow。如果我没有定义您的常量 HTTPREQUEST_PROXYSETTING_PROXY,我只能设法获得超时。只要这个变量被定义为 LONG 并且有一个值,它就可以工作。如果你真的在其他地方定义了这个,我猜问题出在你的代理服务器上,以及它如何处理错误的请求
-
您好 Chrowno,我不明白您的回答。 HTTPREQUEST_PROXYSETTING_PROXY 是方法 SetProxy 的常量选项之一,因此我认为它不需要声明。无论如何,我试图声明它,但脚本仍然超时。也许我为代理使用了错误的 IP?