2012-05-14 22 views
3

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

有没有办法自动配置代理服务器,或从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 

在这种情况下,我不想强​​迫用户找到“访问代理服务器:8080”地址 - 我要的是一种自动填补。

非常感谢。

回答

1

我从下面的链接中获得了下面的vbScript。您可以使用来获取代理服务器,并把它作为一个变量的代码为“访问代理服务器: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 
+0

嗨!这似乎是这样的,但每当我尝试执行查询时,都会说Win32_Proxy是一个无效的类。我已经尝试了在MSDN上找到的其他类,并且他们工作,所以我认为这是该类的特定问题。 –

+0

有趣。这对我有效。如果您发现问题,请告诉我。如果有任何帮助,我在XP上。 –

+0

Win32_Proxy不再可用post win-xp – anand

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) 
+0

确实非常优雅的解决方案 –