3

我正在使用 WinHTTP 在 Excel VBA 宏中执行 GET 请求。但是,如果我尝试从具有代理的网络中的机器发出请求,它就不起作用。如果我手动配置它,它可以工作,但我认为使用我正在开发的工具的人不会知道他们的代理服务器。

有没有办法自动配置代理服务器,或者从 Windows 获取代理配置?下面是一个示例代码:

Dim result As String
Dim URL As String
Dim winHttpReq As Object
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

URL = "http://google.com/"
winHttpReq.Open "GET", URL, False
winHttpReq.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
winHttpReq.setProxy 2, "proxyserver:8080", ""
winHttpReq.send
result = winHttpReq.responseText

在这种情况下,我不想强​​迫用户找到“proxyserver:8080”地址——我想要的是一种自动填充它的方法。

非常感谢。

4

2 回答 2

2

我从以下链接获得了以下 vbScript。您可以使用获取代理服务器并将其作为变量传递给“proxyserver:8080”的代码:

http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/client/retrieving/

如果您知道 vbScript - 它与 VBA 非常相似,我认为这应该会有很大帮助。如果您在使用 VBA 编写此内容时需要帮助,请告诉我。

On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_Proxy")

For Each objItem in colItems
    Wscript.Echo "Proxy Port Number: " & objItem.ProxyPortNumber
    Wscript.Echo "Proxy Server: " & objItem.ProxyServer
    Wscript.Echo "Server Name: " & objItem.ServerName
    Wscript.Echo
Next
于 2012-05-14T20:21:21.527 回答
2

如果其他人在此页面上偶然发现相同问题的答案,我想指出这个答案,其中提到使用VBA-Web项目来解决这个确切的问题。

您的代码将如下所示:

Dim client As New WebClient
With client
    .BaseUrl = "https://www.google.com"
    .EnableAutoProxy = True
End With

Dim request As New WebRequest
With request
    .Method = WebMethod.HttpGet
    .AddHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    .Format = WebFormat.PlainText
End With

Dim response As WebResponse
Set response = client.Execute(request)
于 2015-06-26T15:11:15.550 回答