【问题标题】:Configuring proxy with WinHTTP and Excel使用 WinHTTP 和 Excel 配置代理
【发布时间】:2012-05-22 08:15:25
【问题描述】:

我正在使用 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”地址——我想要的是一种自动填充它的方法。

非常感谢。

【问题讨论】:

    标签: excel vba proxy winhttp


    【解决方案1】:

    如果其他人偶然发现此页面寻找相同问题的答案,我想指出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)
    

    【讨论】:

    • 确实非常优雅的解决方案
    【解决方案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
    

    【讨论】:

    • 嗨!这似乎是这样,但每当我尝试执行查询时,它都会说 Win32_Proxy 是一个无效的类。我已经尝试过在 MSDN 上找到的其他课程并且它们有效,所以我认为这是该课程特有的问题。
    • 有趣。这对我有用。如果您发现问题,请告诉我。如果有任何帮助,我在 XP 上。
    • Win32_Proxy 在 win-xp 后不再可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多