WinInet-Grundlagen
Sie können WinInet FTP-Unterstützung nutzen, um hinzuzufügen, um Dateien aus der Anwendung herunterzuladen und hochzuladen.Sie können OnStatusCallback überschreiben und den dwContext-Parameter verwenden, um Statusinformationen für Benutzer bereitstellen, während Sie suchen und Dateien herunterladen.
Dieser Artikel enthält die folgenden Themen:
Erstellen Sie einen sehr einfachen Browser
Laden Sie eine Webseite herunter
FTP eine Datei
Rufen Sie ein Gopher-Verzeichnis ab
Anzeigen von Statusinformationen beim Übertragen von Dateien
Die folgenden Code auszüge zeigen, wie ein einfacher Browser erstellt, laden Sie eine Webseite, ein FTP eine Datei und eine Suche nach einer Gopher-Datei herunter.Sie werden nicht wie vollständige Beispiele und nicht alle Ausnahmebehandlung enthalten.
Weitere Informationen zu WinInet finden Sie unter Win32-Internet-Erweiterungen (WinInet).
Erstellen Sie einen sehr einfachen Browser
#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();
}
Laden Sie eine Webseite herunter
//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 eine 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();
}
Rufen Sie ein Gopher-Verzeichnis ab
#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();
}
Verwenden Sie OnStatusCallback
Wenn Sie die WinInet-Klassen verwenden, können Sie den OnStatusCallback-Member von CInternetSession-Objekt Ihrer Anwendung verwenden, um Statusinformationen zu erhalten.Wenn Sie ein eigenes CInternetSession-Objekt abgeleitet werden, OnStatusCallback überschreiben und Statusrückrufe ermöglichen, die MFC ruft OnStatusCallback-Funktion mit Statusinformationen über die gesamte Aktivität in dieser Internet-Sitzung an.
Da einer einzelnen Sitzung möglicherweise mehrere Verbindungen unterstützt (die möglicherweise zu ihrer Lebensdauer viele verschiedene anderen Operationen ausgeführt haben), OnStatusCallback erfordert einen Mechanismus, um jede Änderung des Status einer bestimmten Verbindung oder einer Transaktion zu identifizieren.Dieser Mechanismus des Kontext-ID-Parameter bereitgestellt wird, der für viele der Klassen in den Memberfunktionen WinInet-Stütz angegeben ist.Dieser Parameter ist immer vom Typ DWORD und wird immer dwContext benannt.
Der Kontext, der einem bestimmten Internet-Objekt zugewiesen wird, wird nur die Aktivität verwendet, um das Objekt zu identifizieren ursachen im OnStatusCallback-Member des CInternetSession-Objekts.Der Aufruf von OnStatusCallback mehrere Parameter empfängt. Diese Parameter werden, um Ihrer Anwendung mitzuteilen, welchen Fortschritt gemacht wurde und für die Transaktion.
Wenn Sie ein CInternetSession-Objekt erstellen, können Sie einen dwContext-Parameter für den Konstruktor angegeben werden.CInternetSession selbst verwendet nicht die Kontext-ID. Stattdessen leitet sie die Kontext-ID an jedes InternetConnection abgeleitete Objekte weiter, die nicht explizit eine Kontext-ID von ihren eigenen abrufen.Im Gegenzug führen diese CInternetConnection-Objekte an die Kontext-ID, die diese Objekte CInternetFile zu erstellen, wenn Sie nicht explizit eine andere Kontext angeben.Wenn Sie hingegen einen bestimmten Kontext-ID von Ihren eigenen, das Objekt angeben und jede Arbeit, die erledigt dies mit dieser Kontext verknüpft ist.Sie können den Kontext ID verwenden, um zu ermitteln, welche Statusinformationen in der OnStatusCallback-Funktion angegeben sind.
Anzeigen von Statusinformationen beim Übertragen von Dateien
Wenn Sie beispielsweise eine Anwendung schreiben, die eine Verbindung mit einem FTP-Server erstellt, um eine Datei zu lesen, und auch an einen HTTP-Server herstellt, um eine Webseite zu erhalten, können Sie ein CInternetSession-Objekt, CInternetConnection zwei Objekten (das eine CFtpSession handeln würde, und der andere ist CHttpSession) und zwei CInternetFile-Objekten (eins für jede Verbindung).Wenn Sie die Standardwerte für die Parameter dwContext Sie nicht in der Lage, zwischen den Aufrufen OnStatusCallback zu unterscheiden, die den Status für die FTP-Verbindung und die Aufrufe an, die den Status für die HTTP-Verbindung angegeben ist.Wenn Sie eine dwContext ID angeben, für die Sie später in OnStatusCallback testen können, wissen Sie, welche Operation den Rückruf generiert hat.