【问题标题】:Excel VBA - Make a HTTP request with proxyExcel VBA - 使用代理发出 HTTP 请求
【发布时间】: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?

标签: excel vba


【解决方案1】:

HTTPREQUEST_PROXYSETTING_PROXY 是一个常量,你必须定义它。例如,这是WHTTP.SetProxy 命令可以接受的所有值:

HTTPREQUEST_PROXYSETTING_DEFAULT   = 0
HTTPREQUEST_PROXYSETTING_PRECONFIG = 0
HTTPREQUEST_PROXYSETTING_DIRECT    = 1
HTTPREQUEST_PROXYSETTING_PROXY     = 2

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多