2012-05-14 4 views
3

Я использую WinHTTP для выполнения запроса GET в макросе Excel VBA. Однако, если я попытаюсь выполнить запрос с машины в сети с прокси-сервером, это не сработает. Если я настрою его вручную, он работает, но я не думаю, что люди, которые будут использовать инструмент, который я разрабатываю, будут знать свои прокси-серверы.Настройка прокси с помощью 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 

В этом случае, я не хочу, чтобы заставить пользователя, чтобы найти «ProxyServer: 8080» адрес - что я хочу это способ заполнить это автоматически.

Большое спасибо.

ответ

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

Очень элегантное решение действительно –