我正在开发一个简单的小功能,使用 WinInet 功能从启用 SSL 的网站下载文件,即 InternetOpen 和 InternetOpenURL。我最初使用 ERROR_INTERNET_INVALID_CA
(12045) 调用 InternetOpenURL 失败,因为我在测试服务器上使用自签名证书,并发现 ( http://support.microsoft.com/kb/q182888/ ) 修复似乎是使用 InternetQueryOption/InternetSetOption 组合将各种标志传递给INTERNET_OPTION_SECURITY_FLAGS
选项。然而,现在 InternetQueryOption 失败,ERROR_INTERNET_INCORRECT_HANDLE
GetLastError() 发出 (12018) 响应。任何想法为什么会这样?我正在使用直接来自 InternetOpen 的句柄,该句柄以前与非 SSL InternetOpenURL 一起工作得很好。这不应该是正确的句柄吗?
我没有实际代码(不同的计算机),但它与以下非常相似,并且在 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, ...)