我正在使用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”地址 - 我想要的是一种自动填充的方法。
非常感谢。
答案 0 :(得分:2)
如果其他人在此页面上发现了寻找同一问题答案的问题,我想指向this answer,其中提及使用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)
答案 1 :(得分:1)
我从以下链接获得了以下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