Использование Visual Basic VBA с HTTPS и SSL

Можно ли получить доступ к веб-страницам с помощью HTTPS, и для которых требуется логин / пароль с помощью Excel? Ну да и нет. Вот сделка и почему это не так просто.

Сначала определимся с терминами

HTTPS это условно идентификатор для того, что называется SSL (Secure Sockets Layer). Это на самом деле не имеет ничего общего с паролями или логинами как таковыми. Что делает SSL, так это устанавливает зашифрованное соединение между веб-клиентом и сервером так, чтобы никакая информация не передавалась между двумя «в открытом виде» - с использованием незашифрованных передач. Если информация включает информацию о логине и пароле, шифрование передачи защищает их от посторонних глаз... но шифрование паролей не является обязательным требованием. Я использовал фразу «по соглашению», потому что настоящей технологией безопасности является SSL. HTTPS только сообщает серверу, что клиент планирует использовать этот протокол. SSL можно использовать множеством других способов.

Итак... если ваш компьютер отправляет URL на сервер, который использует SSL, и этот URL начинается с HTTPS, ваш компьютер говорит серверу:

instagram viewer

«Эй, мистер Сервер, давайте пожмем руку с этим шифрованием, чтобы все, что мы скажем отныне, не было перехвачено каким-то плохим парнем. И когда это будет сделано, отправьте мне страницу с адресом URL ".

Сервер отправит обратно информацию о ключах для установки SSL-соединения. Это зависит от вашего компьютера, чтобы сделать что-то с ним.

Это «ключ» (каламбур… ну, конечно, Сорта) для понимания роли VBA в Excel. Программирование на VBA должно было бы фактически сделать следующий шаг и реализовать SSL на стороне клиента.

«Настоящие» веб-браузеры делают это автоматически и показывают небольшой символ блокировки в строке состояния, чтобы показать, что это было сделано. Но если VBA просто открывает веб-страницу в виде файла и считывает содержащуюся в ней информацию в ячейки электронной таблицы (очень распространенный пример), Excel не сделает этого без какого-либо дополнительного программирования. Любезное предложение сервера пожать друг другу руки и установить безопасную связь SSL просто игнорируется Excel.

Но вы можете прочитать страницу, которую вы запросили точно так же

Чтобы доказать это, давайте воспользуемся SSL-соединением, используемым службой Gmail Google (который начинается с «https»), и закодируем вызов, чтобы открыть это соединение, как будто это файл.

Это читает веб-страницу, как будто это был простой файл. Поскольку последние версии Excel будут импортировать HTML автоматически, после выполнения оператора Open страница Gmail (без объектов Dynamic HTML) импортируется в электронную таблицу. Целью SSL-соединений является обмен информацией, а не просто чтение веб-страницы, поэтому обычно это не продвинет вас слишком далеко.

Чтобы сделать больше, в вашей программе Excel VBA должен быть какой-то способ поддерживать протокол SSL и, возможно, также поддерживать DHTML. Вы, вероятно, лучше начать с полного Visual Basic а не Excel VBA. Затем используйте элементы управления, такие как WinInet API передачи Интернета, и при необходимости вызывайте объекты Excel. Но можно использовать WinInet непосредственно из программы Excel VBA.

WinInet - это API - интерфейс прикладного программирования - для WinInet.dll. Он в основном используется как один из основных компонентов Internet Explorer, но вы также можете использовать его непосредственно из своего кода и использовать его для HTTPS. Написание кода для использования WinInet - это задача как минимум средней сложности. В общем, следующие шаги:

  • Подключитесь к серверу HTTPS и отправьте запрос HTTPS
  • Если сервер запрашивает подписанный сертификат клиента, повторно отправьте запрос после присоединения контекста сертификата.
  • Если сервер удовлетворен, сеанс аутентифицирован

Существует два основных различия в написании кода WinInet для использования https вместо обычного HTTP:

Также следует помнить, что функция обмена логином / паролем логически не зависит от шифрования сеанса с использованием https и SSL. Вы можете сделать одно или другое, или оба. Во многих случаях они идут вместе, но не всегда. А реализация требований WinInet ничего не делает для автоматического ответа на запрос логина / пароля. Если, например, логин и пароль являются частью веб-формы, вам, возможно, придется выяснить имена полей и обновите поля из Excel VBA перед «публикацией» строки входа в сервер. Правильный ответ на безопасность веб-сервера является большой частью того, что делает веб-браузер. С другой стороны, если требуется аутентификация SSL, вы можете рассмотреть возможность использования объекта InternetExplorer для входа из VBA ...

Суть в том, что использование https и вход на сервер из программы Excel VBA возможны, но не ожидайте написания кода, который делает это всего за несколько минут.

instagram story viewer