https - 将 CHttpFile 与 HTTPS 站点一起使用

标签 https mfc

我有这个代码,用于从我的网站读取数据文件:

CInternetSession    iSession;
CHttpFile           *pWebFile = nullptr;
DWORD               dwStatusCode;
CString             strError, strTargetZIP, strDownloadURL;

strTargetZIP = theApp.GetWorkingPath() + _T("AutoUpdate\\MWBDataUpdate.zip");
strDownloadURL = _T("http://www.publictalksoftware.co.uk/mwbdata/MWBDataUpdate.zip");

// ask user to go online
if (InternetGoOnline((LPTSTR)(LPCTSTR)strDownloadURL, hWnd, 0))
{
    TRY
    {
        // our session should already be open
        // try to open up internet session to my URL
        // Use flag INTERNET_FLAG_RELOAD
        pWebFile = (CHttpFile*)iSession.OpenURL(strDownloadURL, 1,
        INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD);

        if (pWebFile != nullptr)
        {
            if (pWebFile->QueryInfoStatusCode(dwStatusCode))
            {
                // 20x codes mean success
                if ((dwStatusCode / 100) == 2)
                {
                }
                else
                {
                    // There was a problem!
                    strError.Format(IDS_TPL_INVALID_URL, dwStatusCode);
                    AfxMessageBox(strError, MB_OK | MB_ICONERROR);
                }
            }
        }
        else
        {
            // Note, there is no error log.  Use new error message?
            AfxMessageBox(IDS_STR_UPDATE_CHECK_ERR, MB_OK | MB_ICONERROR);
        }
    }
    CATCH(CException, e)
    {
        e->GetErrorMessage(szError, _MAX_PATH);
        AfxMessageBox(szError, MB_OK | MB_ICONERROR);
    }
    END_CATCH

    // Tidy up
    if (pWebFile != nullptr)
    {
        pWebFile->Close();
        delete pWebFile;
    }
    iSession.Close();
}

我最近将我的网站更改为使用 HTTPS,并且我正在尝试查找是否我需要做的只是更改代码中的 URL。我查找了 CHttpFile 的最新文档它只提到了HTTP

感谢您的澄清。

最佳答案

CInternetSession::OpenURL 调用 InternetOpenUrl API。 InternetOpenUrl 需要 INTERNET_FLAG_SECURE 来确保网站安全。

将网址从 http:// 更改为 https://

INTERNET_FLAG_SECURE添加到OpenURL的选项中。

示例:

CInternetSession isession;
CString url = _T("https://www.google.com");
CString filename = _T("c:\\test\\test.html");
CHttpFile *httpfile = (CHttpFile*)isession.OpenURL(url, 1, INTERNET_FLAG_SECURE |
    INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
if (httpfile)
{
    DWORD dwStatusCode;
    httpfile->QueryInfoStatusCode(dwStatusCode);
    if(dwStatusCode == 200)
    {
        char buf[0x1000] = { 0 };
        DWORD read = 0;
        CFile file;
        if (file.Open(filename, CFile::modeCreate | CFile::modeWrite))
            while(InternetReadFile(*httpfile, buf, sizeof(buf), &read) && read)
                file.Write(buf, read);
    }

    httpfile->Close();
    delete httpfile;
}

关于https - 将 CHttpFile 与 HTTPS 站点一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438574/

相关文章:

Node.JS + HTTPS + 客户端证书 = 问题

node.js https没有响应 'end'事件, 'close'代替?

c++ - 尝试进行多线程时 WriteFile() 崩溃

c++ - 如何更改下一个字符在 MFC 的编辑控件中的位置?

c++ - 使用 C++ 的 Win32/MFC 命名约定

amazon-web-services - 如何为 Elastic Beanstalk 网址启用 HTTPS

google-chrome - Chrome 63 将 http 更改为 https

git - 我怎样才能 "login"到 git?

c++ - MFC Unclickable 按钮(在 MouseMove 上远离光标)

c++ - 使用 MFC 的多语言应用程序 - 工作流程?