Я работаю над простой маленькой функцией для загрузки файла с веб-сайта с поддержкой SSL с использованием функций WinInet, а именно InternetOpen и InternetOpenURL. Первоначально у меня был сбой вызова InternetOpenURL с ERROR_INTERNET_INVALID_CA
(12045), потому что я использовал самозаверяющий сертификат на моем тестовом сервере, и обнаружил (http://support.microsoft.com/kb/q182888/), что исправление, похоже, использовало Комбинация InternetQueryOption / InternetSetOption для передачи различных флагов опции * 1004. * Однако теперь InternetQueryOption завершается ошибкой с ответом ERROR_INTERNET_INCORRECT_HANDLE
(12018) от GetLastError (). Любые идеи, почему это так? пришел непосредственно из InternetOpen, который ранее работал нормально с InternetOpenURL без SSL. Разве это не должно быть правильным дескриптором?
У меня нет фактического кода (другой компьютер), но он очень похож на следующий и не работает в InternetGetOption с ERROR_INTERNET_INCORRECT_HANDLE
:
HINTERNET hReq = InternetOpen(...)
if (!hReq) { printf("InternetOpen Error: %d", GetLastError()); }
DWORD dwFlags = 0;
DWORD dwBuffLen = sizeof(dwFlags);
BOOL ret = false;
ret = InternetQueryOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
(LPVOID)&dwFlags, &dwBuffLen);
if (!ret) { printf("InternetQueryOption Error: %d", GetLastError()); }
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
ret = InternetSetOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
&dwFlags, sizeof (dwFlags) );
if (!ret) { printf("InternetSetOption Error: %d", GetLastError()); }
InternetOpenURL(hReq, ...)