2

現在 CAtlHttpClient を使用して Web サーバーに情報を照会する MFC アプリケーションがあります。

これを変更して、サーバー認証と SSL を使用してクエリが安全に行われるようにします。

グーグルは、MicrosoftがWinInet、WinHTTPなど、これをサポートする方法を数回変更したことを明らかにしましたが、私の人生では、MSVS 2005でMFCを使用して上記を行う方法を理解できません.

アプリケーションは C++ で作成されています。できれば、.Net を図にドラッグすることは避けたいと思います。

ヘルプ、ヒント、提案、またはポインタをいただければ幸いです。

ありがとう、

唯一

4

6 に答える 6

4

Ultimate TCP/IP を見ることができます - これは MS フレンドリーで、あなたが求めていることをするかもしれません:

http://www.codeproject.com/KB/MFC/UltimateTCPIP.aspx

私はこのツールキットを使用していますが、とても良いです。

于 2008-12-18T18:50:18.907 に答える
2

2002 年に、私は Windows Developer Magazine に、OpenSSL を使用して MFC の CAsyncSocket に SSL を提供する方法を示す記事を書きました。コードと記事は次の場所にあります: http://www.serverframework.com/asynchronousevents/2010/10/using-openssl-with-asynchronous-sockets.htmlそしてあなたを助けるかもしれません.MicrosoftのSChannelを使って同様のことをすることもできますが、 OpenSSLがバッファリングの一部を行うため、もう少し複雑なので、クリアテキストが出力されるまでバイトをプッシュするだけです...

于 2008-12-18T17:51:43.750 に答える
2

法案に適合する可能性のある Microsoft サンプル コードへのポインタを見つけました: http://msdn.microsoft.com/en-us/library/s2ya483s(VS.80).aspx

ただし、これは AcquireCredentialsHandle で失敗します。これは、この 8 月のフォーラムへの次の質問になります...

于 2008-12-18T21:48:05.117 に答える
1

WinHttp を使用するだけです。これは優れた API であり、HTTP 経由で SSL を実行するために必要なすべての機能を備えています (さらに、Vista のプロキシ構成で動作します)

于 2008-12-30T17:06:28.323 に答える
0

OpenSSLの一部として提供されるlibeay32.dllファイルとssleay32.dllファイル使用についてはどうでしょうか。

https://code.google.com/p/openssl-for-windows/

于 2008-12-18T23:44:10.000 に答える
0

小さなファイルの Web サイトにアクセスする機能を持つ MFC アプリケーションで Visual Studio 2005 を使用しています。WinINet関数を使用しています。Microsoft Windows Dev Center の WinINet API リファレンスを参照してください。これは、プロトコル (HTTP、HTTPS、FTP など) を指定する URL を使用して Web サイトにアクセスする単純な関数セットを提供し、小さな値をプルダウンします。ファイル。

このサイトを見ると、libcurlこのマイクロソフト テクニカル ノートへの参照がありました。記事 ID 238425 - 情報: WinInet は、2015 年 8 月 12 日に廃止されたサービスでの使用がサポートされていません。記事の要約は次のとおりです。

Microsoft Win32 Internet Functions (WinInet.dll からエクスポート) は、サービスまたは Internet Information Server (IIS) アプリケーション (サービスでもあります) から実行する場合はサポートされません。この記事では、サービスまたは Internet Information Server アプリケーションでの WinInet.dll の使用について説明します。

MFC アプリケーションで使用している該当するソース コードには、完全な URI を構築するための追加情報が追加された HTTPS タイプの URL を使用するダイアログ ボックスがあり、Web サイトに移動して完全な小さなファイルを取得します。

int GetFile (HINTERNET hOpen, TCHAR * szURL, BYTE  szTemp[4096])   
{
    DWORD dwSize;
    TCHAR szHead[15];
    HINTERNET  hConnect;

    szHead[0] = '\0';
    szTemp[0] = 0;

    // Opens a resource specified by a complete HTTP URL.
    if ( !(hConnect = InternetOpenUrl( hOpen, szURL, szHead, 15, INTERNET_FLAG_DONT_CACHE, 0)))
    {
        DWORD  dwlasterror = GetLastError();
        if (dwlasterror == ERROR_INTERNET_NAME_NOT_RESOLVED) {
            AfxMessageBox (_T("Error: ERROR_INTERNET_NAME_NOT_RESOLVED - check LAN connectivity."));
        } else if (dwlasterror == ERROR_INTERNET_TIMEOUT) {
            AfxMessageBox (_T("Error: ERROR_INTERNET_TIMEOUT - check LAN connectivity."));
        } else if (dwlasterror == ERROR_INTERNET_SERVER_UNREACHABLE) {
            AfxMessageBox (_T("Error: ERROR_INTERNET_SERVER_UNREACHABLE - check LAN connectivity."));
        } else if (dwlasterror == ERROR_INTERNET_OPERATION_CANCELLED) {
            AfxMessageBox (_T("Error: ERROR_INTERNET_OPERATION_CANCELLED - check LAN connectivity."));
        } else {
            CString msg;
            msg.Format (_T("Error: GetLastError() returned %d."), dwlasterror);
            AfxMessageBox (msg);
        }
        return -2;
    }

    // Reads data from a handle opened by the InternetOpenUrl, FtpOpenFile, or HttpOpenRequest function.
    if (InternetReadFile (hConnect, szTemp, 4096,  &dwSize) )
    {
        if (dwSize) {
            return dwSize;
        }
        return -3;
    }
    return -4;
}

int DownloadURLImage (TCHAR * szURL, BYTE  szTemp[4096])
{
    int result = -1;
    HINTERNET hInternet;

    // Initializes an application's use of the WinINet functions.
    hInternet= InternetOpen (_T("DeviceConfig"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    if (hInternet) {
        // if open succeeded then get the file and close the handle as we be done.
        result = GetFile (hInternet, szURL, szTemp) ; 
        InternetCloseHandle(hInternet);
    }
    return result ;
}
于 2015-08-13T00:29:59.270 に答える