Использование CHttpFile с сайтами HTTPS - PullRequest
0 голосов
/ 20 мая 2018

У меня есть этот код, который я использую для чтения файла данных с моего сайта:

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.

Спасибо за разъяснения.

1 Ответ

0 голосов
/ 20 мая 2018

CInternetSession::OpenURL звонки InternetOpenUrl API.InternetOpenUrl необходимо INTERNET_FLAG_SECURE для защищенных веб-сайтов.

Измените URL с http:// на https://

Добавьте INTERNET_FLAG_SECURE к OpenURL 's option.

Пример:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...