WinInet-Grundlagen
Sie können WinInet verwenden, um FTP-Unterstützung zum Herunterladen und Hochladen von Dateien aus Ihrer Anwendung hinzuzufügen. Sie können OnStatusCallback außer Kraft setzen und den dwContext-Parameter verwenden, um Den Benutzern Statusinformationen bereitzustellen, während Sie nach Dateien suchen und diese herunterladen.
Dieser Artikel enthält folgende Themen:
Die folgenden Codeauszüge veranschaulichen, wie Sie einen einfachen Browser erstellen, eine Webseite herunterladen, eine DATEI FTP-Datei herunterladen und nach einer Gopher-Datei suchen. Sie sind nicht als vollständige Beispiele gedacht und enthalten nicht alle Ausnahmebehandlungen.
Weitere Informationen zu WinInet finden Sie unter Win32 Internet Extensions (WinInet).
Erstellen eines sehr einfachen Browsers
#include <afxinet.h>
void DisplayPage(LPCTSTR pszURL)
{
CInternetSession session(_T("My Session"));
CStdioFile *pFile = NULL;
CHAR szBuff[1024];
//use a URL and print a Web page to the console
pFile = session.OpenURL(pszURL);
while (pFile->Read(szBuff, 1024) > 0)
{
printf_s("%1023s", szBuff);
}
delete pFile;
session.Close();
}
Herunterladen einer Webseite
//this code excerpt also demonstrates try/catch exception handling
#include <afxinet.h>
void DisplayHttpPage(LPCTSTR pszServerName, LPCTSTR pszFileName)
{
CInternetSession session(_T("My Session"));
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
try
{
CString strServerName;
INTERNET_PORT nPort = 80;
DWORD dwRet = 0;
pServer = session.GetHttpConnection(pszServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, pszFileName);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK)
{
CHAR szBuff[1024];
while (pFile->Read(szBuff, 1024) > 0)
{
printf_s("%1023s", szBuff);
}
}
delete pFile;
delete pServer;
}
catch (CInternetException *pEx)
{
//catch errors from WinInet
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
_tprintf_s(_T("%63s"), pszError);
}
session.Close();
}
FTP-Datei
#include <afxinet.h>
void GetFtpFile(LPCTSTR pszServerName, LPCTSTR pszRemoteFile, LPCTSTR pszLocalFile)
{
CInternetSession session(_T("My FTP Session"));
CFtpConnection *pConn = NULL;
pConn = session.GetFtpConnection(pszServerName);
//get the file
if (!pConn->GetFile(pszRemoteFile, pszLocalFile))
{
//display an error
}
delete pConn;
session.Close();
}
Abrufen eines Gopher-Verzeichnisses
#include <afxinet.h>
void RetrieveGopherFile(LPCTSTR pszGopherSite, LPCTSTR pszFile)
{
CInternetSession session(_T("My Gopher Session"));
CGopherConnection *pConn = NULL;
CGopherFileFind *pFile;
pConn = session.GetGopherConnection(pszGopherSite);
pFile = new CGopherFileFind(pConn);
BOOL bFound = pFile->FindFile(pszFile);
while (bFound)
{
//retrieve attributes of found file
bFound = pFile->FindNextFile();
}
delete pFile;
delete pConn;
session.Close();
}
OnStatusCallback verwenden
Bei Verwendung der WinInet-Klassen können Sie das OnStatusCallback-Element des CInternetSession-Objekts Ihrer Anwendung verwenden, um Statusinformationen abzurufen. Wenn Sie Ihr eigenes CInternetSession
Objekt ableiten, außer Kraft setzen OnStatusCallback
und Statusrückrufe aktivieren, ruft MFC Ihre OnStatusCallback
Funktion mit Statusinformationen zu allen Aktivitäten in dieser Internetsitzung auf.
Da eine einzelne Sitzung möglicherweise mehrere Verbindungen unterstützt (die während ihrer Lebensdauer viele verschiedene Vorgänge ausführen können), OnStatusCallback
muss ein Mechanismus benötigt werden, um jede Statusänderung mit einer bestimmten Verbindung oder Transaktion zu identifizieren. Dieser Mechanismus wird vom Kontext-ID-Parameter bereitgestellt, der vielen Memberfunktionen in den WinInet-Unterstützungsklassen zugewiesen wird. Dieser Parameter ist immer vom Typ DWORD und wird immer dwContext genannt.
Der einem bestimmten Internetobjekt zugewiesene Kontext wird nur verwendet, um die Aktivität zu identifizieren, die das Objekt im OnStatusCallback
Element des CInternetSession
Objekts verursacht. Der Aufruf, der OnStatusCallback
mehrere Parameter empfängt. Diese Parameter arbeiten zusammen, um Ihrer Anwendung mitzuteilen, welche Fortschritte für welche Transaktion und Verbindung vorgenommen wurden.
Wenn Sie ein CInternetSession
Objekt erstellen, können Sie einen dwContext-Parameter für den Konstruktor angeben. CInternetSession
selbst verwendet nicht die Kontext-ID; Stattdessen übergibt sie die Kontext-ID an alle internet Verbinden ion-abgeleiteten Objekte, die keine eigene Kontext-ID abrufen. Diese Objekte übergeben wiederum die Kontext-ID an CInternetFile
Objekte, die sie erstellen, CInternetConnection
wenn Sie keine andere Kontext-ID explizit angeben. Wenn Sie dagegen eine bestimmte Kontext-ID ihres eigenen angeben, werden das Objekt und alle aufgaben, die es tut, dieser Kontext-ID zugeordnet. Sie können die Kontext-IDs verwenden, um zu identifizieren, welche Statusinformationen Ihnen in Ihrer OnStatusCallback
Funktion zur Verfügung gestellt werden.
Statusinformationen beim Übertragen von Dateien anzeigen
Wenn Sie z. B. eine Anwendung schreiben, die eine Verbindung mit einem FTP-Server erstellt, um eine Datei zu lesen und eine Verbindung mit einem HTTP-Server herzustellen, um eine Webseite abzurufen, verfügen Sie über ein CInternetSession
Objekt, zwei CInternetConnection
Objekte (eine wäre ein CFtpSession
und die andere wäre ein CHttpSession
) und zwei CInternetFile
Objekte (eine für jede Verbindung). Wenn Sie Standardwerte für die dwContext-Parameter verwendet haben, können Sie nicht zwischen den Aufrufen unterscheiden, die OnStatusCallback
den Fortschritt für die FTP-Verbindung und die Aufrufe angeben, die den Fortschritt für die HTTP-Verbindung angeben. Wenn Sie eine dwContext-ID angeben, auf die Sie später testen OnStatusCallback
können, wissen Sie, welcher Vorgang den Rückruf generiert hat.
Siehe auch
Grundlagen der MFC-Internetprogrammierung
Win32-Interneterweiterungen (WinInet)