VBA ServerXMLHTTP запрос https с самозаверяющим сертификатом
Я использую объект ServerXMLHTTP для создания некоторых HTTP-запросов на excel 2007 vba script.
Но мне нужно подключиться к серверу https, который использует самоподписанный SSL-сертификат, поэтому по умолчанию я получаю сообщение "Недопустимый или неправильный орган сертификации". Есть ли способ настроить объект ServerXMLHTTP, чтобы он не требовал сертификата CA?
Ниже приведен пример кода:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
Ответы
Ответ 1
У меня была эта проблема некоторое время, и мне удалось ее преодолеть только благодаря этому:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
Я нашел это здесь setOption Method и getOption Method
Здесь в этом коде я только что использовал SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
, но вы можете попробовать с другими более конкретными:
-
SXH_SERVER_CERT_IGNORE_WRONG_USAGE
-
SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
-
SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
-
SXH_SERVER_CERT_IGNORE_UNKNOWN_CA
Ответ 2
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
Получено вышеупомянутое решение для работы с небольшим изменением. Вместо:
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
Я использовал:
objHTTP.SetOption(2) = (objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
В противном случае я получаю сообщение об ошибке:
Ошибка компиляции Microsoft VBScript '800a0414' Невозможно использовать круглые скобки при вызове Sub objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
на который ссылаются:
SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS