Проверка доступности прокси сервера макросом VBA

Этот код проверяет заданного доступность прокси сервера при помощи функции CheckProxyServer:

Sub ПримерПроверкиПроксиСервера()
    myProxy$ = "212.45.5.172:3128"
 
    If CheckProxyServer(myProxy$) Then
        MsgBox "Прокси сервер с адресом " & myProxy$ & " доступен!", vbInformation
    Else
        MsgBox "Прокси сервер с адресом " & myProxy$ & " недоступен!", vbExclamation
    End If
End Sub

Прокси-сервер (Proxy Server) позволяет скрыть ваш IP адрес, что позволяет вам выполнять запросы к одному и тому же серверу как-бы с разных компьютеров.

Это может быть полезно при выполнении многократных запросов к серверам типа Яндекс и Google,
которые блокируют автоматические запросы от программы по истечении некоторого времени.

Загрузить список прокси-серверов вам поможет этот код: http://excelvba.ru/code/ProxyServersList

Код функции CheckProxyServer:

Function CheckProxyServer(ByVal Proxy$) As Boolean
    ' функция проверяет работоспособность прокси сервера Proxy$,
    ' выполняя запрос IP на сайте internet.yandex.ru
    ' Если Яндекс возвращает IP адрес прокси-сервера в течение
    ' непродолжительного времени, считаем данный прокси-сервер рабочим
    ' Функция возвращает TRUE, если прокси сервер рабочий
    On Error Resume Next: Err.Clear
    With CreateObject("MSXML2.ServerXMLHTTP.6.0")
        .setProxy 2, Proxy$
        .Open "GET", "http://internet.yandex.ru/", False
        .setTimeouts 10000, 10000, 10000, 10000
        .send ("")
 
        txt = Split(Split(.responseText, "Мой IP: ")(1), "<")(0)
    End With
    CheckProxyServer = (Proxy$ Like txt & ":*") And (Err = 0)
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Ой забыл вернуть CreateObject("MSXML2.ServerXMLHTTP.6.0")

Сейчас как-то так:

Sub CheckProxyServer()
Dim proxy As String
'You'll need to Add a reference to Microsoft HTML Object Libarary
Dim html As MSHTML.HTMLDocument

proxy = "185.8.4.105:8080"
On Error Resume Next: Err.Clear
With CreateObject("MSXML2.XMLHttp")
.setProxy 2, proxy
.Open "GET", "http://yandex.ru/internet/", False
.setTimeouts 10000
.send ("")

If .Status = 200 Then
Set html = CreateObject("htmlfile")
html.body.innerHTML = .responseText
Set ipv4 = html.getElementsByClassName("client__item_type_ipv4")
MsgBox (ipv4(0).innerText)
End If

End With
End Sub

Как по мне удобнее в HTML или XML потрошить ответы сервера.

Спасибо! А как изменить код функции, чтобы это работало в современных реалиях? Сейчас эта страницы доступна по адресу https://yandex.ru/internet/, и вместо "Мой IP: ", видимо нужно что-то другое прописать. Только не соображу что именно.

Спасибо большое!
Нужно заменить "<" на vbLf
добавить DoEvents, чтоб остановить можно было.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
      _   ___   _____       _          __   __
__| | |_ _| | ____| | | __ _ \ \ / /
/ _` | | | | _| _ | | / _` | \ V /
| (_| | | | | |___ | |_| | | (_| | | |
\__,_| |___| |_____| \___/ \__,_| |_|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.