Макрос загружает список прокси серверов с сайта free-proxy-list.info
При поиске адресов прокси серверов на странице сайта используются регулярные выражения.
Каждый найденный Proxy Server проверяется на доступность (для последующего использования в других макросах)
Функция проверки доступности прокси-сервера есть в этой статье: http://excelvba.ru/code/ProxyServer
Sub ПримерПроверкиСпискаПроксиСерверовНаДоступность()
Dim ProxyServers As Collection
Set ProxyServers = ProxyServersList ' запрашиваем список прокси серверов
Debug.Print "Найдено прокси-серверов: " & ProxyServers.Count
' перебираем все прокси-серверы, проверяя их на доступность
' (время отклика менее 2 секунд)
For Each ProxyServer In ProxyServers
If CheckProxyServer(ProxyServer) Then
Debug.Print "Прокси сервер с адресом " & ProxyServer & " доступен!"
Else
Debug.Print "Прокси сервер с адресом " & ProxyServer & " недоступен!"
End If
Next
End Sub
Код функции ProxyServersList:
Function ProxyServersList() As Collection
' возвращает колекцию адресов прокси-серверов (c номерами портов)
' (каждый адрес в формате XXX.XXX.XXX.XXX:YYYY)
'On Error Resume Next: Err.Clear:
Set ProxyServersList = New Collection
URL$ = "http://www.free-proxy-list.info/free-proxy-list/anon-elite-proxy.php"
With CreateObject("MSXML2.ServerXMLHTTP.6.0")
.Open "GET", URL$, False: .setTimeouts 2000, 2000, 2000, 2000:
.send (""): DoEvents: txt$ = .responseText ' запрашиваем список прокси
' обрабатывать результаты запроса будем с использованием регулярных выражений
Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True
' шаблон для адреса и порта прокси-сервера (взят с сайта regexlib.com)
RegExp.Pattern = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\." & _
"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\." & _
"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\." & _
"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9]):" & _
"(6553[0-5]|655[0-2][0-9]\d|65[0-4](\d){2}|6[0-4](\d){3}|[1-5](\d){4}|[1-9](\d){0,3})"
If Not RegExp.test(txt$) Then Exit Function
Set Matches = RegExp.Execute(txt$) ' находим все адреса прокси серверов в тексте txt$
' заносим все найденные адреса в коллекцию ProxyServersList
For i = 0 To Matches.Count - 1: ProxyServersList.Add Matches.Item(i).Value: Next
End With
End Function
Результаты работы макроса (проверялись только российские прокси серверы):
Найдено прокси-серверов: 6
193.19.82.112:3128 недоступен
Прокси сервер с адресом 212.45.5.172:3128 доступен!
62.117.124.122:443 недоступен
78.36.103.192:8080 недоступен
85.237.46.141:8080 недоступен
91.143.175.49:8080 недоступен