Данная функция позволяет проверить, доступен ли тот или иной веб-ресурс с вашего компьютера, и получить код состояния HTTP
Как известно, при переходе по ссылке (URL), веб-сервер возвращает код состояния HTTP.
Наиболее популярный коды ответа веб-сервера: (перечень всех кодов состояния можно посмотреть в Википедии)
- 200 OK («хорошо»)
- 403 Forbidden («запрещено»)
- 404 Not Found («не найдено»)
Код состояния - это целое число из 3 цифр.
По первой цифре можно определить, доступен ли ресурс: если первая цифра 2, то ресурс доступен, если любая другая - то скорее всего нет.
Пример макроса, проверяющего доступ к различным ресурсам по URL:
Sub ПроверкаURL() URL$ = "http://excelvba.ru/resources/FillDocuments" ' ссылка на каталог MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 200 (папка существует, доступ открыт) URL$ = "http://ExcelVBA.ru/updates/" ' ссылка на каталог MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 403 (папка существует, но доступ к ней закрыт) URL$ = "http://ExcelVBA.ru/mail.jpg" ' ссылка на файл MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 200 (файл существует, доступен) URL$ = "http://excelvba.ru/code/GetURLstatus" ' ссылка на веб-страницу MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 200 (веб-страница существует, доступна) URL$ = "http://excelvba.ru/error-test-macro" ' ссылка на веб-страницу MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 404 (веб-страница по такой ссылке не найдена) URL$ = "http://excelvba.ru/.htaccess" ' ссылка на недоступный файл MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 403 (файл существует, не доступен) URL$ = "excelvba.ru" ' неверная ссылка - без «http://» MsgBox GetURLstatus(URL$), vbInformation, URL$ ' возвращает 0 (URL в неверном формате - запрос не выполнен) End Sub
Код функции GetURLstatus, позволяющий выполнять такую проверку веб-ресурсов:
Function GetURLstatus(ByVal URL$) As Long ' функция проверяет наличие доступа к ресурсу URL$ (файлу или каталогу) ' возвращает код ответа сервера (число), либо 0, если ссылка ошибочная ' (200 - ресурес доступен, 404 - не найден, 403 - нет доступа, и т.д.) On Error Resume Next: URL$ = Replace(URL$, "\", "/") Set xmlhttp = CreateObject("Microsoft.XMLHTTP") xmlhttp.Open "GET", URL, "False" xmlhttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" xmlhttp.send GetURLstatus = Val(xmlhttp.Status) Set xmlhttp = Nothing End Function
Комментарии
Похоже, это связано с тем, что Дропбокс прекратил поддержку IE11
Игорь, вот не подумайте, что денег жалко, но не спортивно это как-то, сам поковыряюсь. Я в общем и не искал готовое решение, просто хотел посоветоваться, как такое может быть. После четырех лет работы вдруг перестает работать, причем только https://www.dropbox.com/
Алексей, тут надо не идеями делиться, а проверять макрос на ваших данных, и дорабатывать макрос для решения проблемы.
Могу сделать под заказ. По цене - около 1500 руб.
Добавил исправление. 200-->400
Игорь, есть у меня один макрос в котором я использовал предложенный Вами способ для тестирования доступа к https://www.dropbox.com/ и он работал года три. Но вот в ночь с 15 на 16 декабря перестал: все время выдает 400!
На десяток других сервисов реагирует нормально. И вообще не нашел других косячников. Уже сутки бьюсь, друзья помогали.. Может поделитесь идеями?
Мои макросы работают только под Windows
Для Мак - нужны совсем другие макросы, с этим помочь не смогу
Не работает, возвращает всегда 0. Проверял на Макбуке, может там, что-то по другому работает.
Можно ли определить имя открытого сайта,через VBA?
Макрос немного изменить надо, чтобы можно было таймаут задать.
Возьмите за основу код функции GetResponse
с этой страницы: http://excelvba.ru/code/GetHTTPResponse
При сканировании IPTV плей листа, на некоторых макрос висит, как ограничить время ?
Елена, с этим не могу помочь, - у меня нет Mac для тестирования кода
Под Parallels и этот код заработает, а из-под MacOS надо что-то совсем другое делать
Здравствуйте. А как сделать такой макрос только для Mac?
Слава, Богу ! Нашел, то что нужно! Спасибо , автору макроса!
Спасибо!!!
еще можно добавить
txt = Replace(txt, " ", "%20")
круто! спасибо, ссылки вылечились!
Пётр, этот вариант поможет обойтись без списка замен:
наверное что то типа этого http://excelvba.ru/code/URLEncode
но в ссылках попадаются и «» и символы à и ö
так что пока только вручную составляю таблицу соответствий для replace потихоньку
если в ячейку введен верный URL, то это "проблема" уже не самой ячейки
а значит нужно предварительно преобразовать ссылку перед дальнейшей обработкой
например перед GetURLstatus или перед скачкой файла
чтобы это делать вручную - еще нужно выявить эти ссылки и выявить такие символы, которые нужно подменить на верные
но благо, что хотя бы такой метод через Replace хорошо работает
а есть какой то макрос, который сам проверит каждый символ в URL и преобразует в нужный?
чтобы не составлять список replace, какой символ на что заменить перед обработкой
спасибо
Добавьте в начало функции GetURLstatus:
и всё будет работать.
В ваших ссылках - недопустимые символы.
При вводе такой ссылки в браузер, он сам преобразует эти символы в их коды
А функция GetURLstatus такой конвертации не выполняет, — потому и возвращалась 404 ошибка.
abc = GetURLstatus(http://www.old-games.ru/ games/pc/turn_n_burn/ turn_‘n_burn_cover.jpg")
теперь эта 404, а прошлая, которая wolverine, - 200
*можно объединить три комментария в один?
наверное из-за апострофа?
а как правильно скормить ссылку ?
почему выдает 404 ?
abc = GetURLstatus("http://www.old-games.ru/games/ pc/x-2_wolverine’s_revenge/ x-2_wolverine’s_revenge_cover.jpg")
картинка же в браузере открывается
Спасибо!
Отправить комментарий