15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как сделать SSL запрос.

Данный пример показывает, как установить HTTP соединение через Secure Socket Layer (SSL) или Private Communications Technology (PCT) используя WinInet API-вызовы. Защищённый HTTP (HTTPS://) располагаетня на 443 порту.

Следующий пример может быть использован для установления HTTPS соединения:

   ...
   hOpen = InternetOpen (...);
   Connect = InternetConnect (
                hOpen,                      // обработчик InternetOpen
                "MyHttpServer",             // Имя сервера
      INTERNET_DEFAULT_HTTPS_PORT,// По умолчанию HTTPS порт - 443
                "",                         // Имя пользователя
                "",                         // Пароль пользователя
                INTERNET_SERVICE_HTTP,      // Сервис
      0,                          // Флаги
      0                           // Контекст
                   );
   hReq = HttpOpenRequest (
                hConnect,                // Обработчик InternetConnect
      "GET",                      // Метод
      "",                         // Имя объекта
      HTTP_VERSION,               // Версия
      "",                         // Ссылка (Referer)
                NULL,             // Дополнительные заголовки
      INTERNET_FLAG_SECURE,       // Флаги
      0                           // Контекст
                );
   ... 

Всё отличие при использовании HTTPS вместо HTTP заключается в следующем:

  • InternetConnect использует INTERNET_DEFAULT_HTTPS_PORT вместо INTERNET_INVALID_PORT_NUMBER или INTERNET_DEFAULT_HTTP_PORT

  • HttpOpenRequest использует опцию INTERNET_FLAG_SECURE в добавление ко всем остальным опциям.

Чтобы обойти ошибки сертификации, можно использовать следующие две опции в HttpOpenRequest либо в InternetOpenUrl:

  • INTERNET_FLAG_IGNORE_CERT_CN_INVALID - Игнорирует ошибки, которые могут возникать при несовпадении имени хоста сервера и имени хоста, указанном в запросе.

  • INTERNET_FLAG_IGNORE_CERT_DATE_INVALID - Игнорирует ошибки, связанные с истекшим сроком действия сертификата сервера.

Более полная информация по этим флагам расписана в документации Internet Client SDK.