Freigeben über


WinInet-Grundlagen

Sie können WinInet-Klassen verwenden, um FTP-Unterstützung hinzuzufügen, um Dateien aus der Anwendung herunterladen und hochladen. Sie können die 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 an, während das Übertragen Dateien

Die folgenden Codeauszüge zeigen, wie ein einfacher Browser, eine Webseite, ein FTP eine Datei und eine Suche nach einer Gopher-Datei herunterzuladen erstellt. Es ist nicht vorgesehen, wie vollständige Beispiele und nicht alle Ausnahmebehandlung enthalten.

Weitere Informationen über WinInet-Klassen finden Sie unter Win32-Internet-Erweiterungen (WinInet-Klassen).

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 die Anwendung WinInets klassifiziert, können Sie den OnStatusCallback-Member einer CInternetSession-Objekt der Anwendung verwenden, um Statusinformationen abzurufen. Wenn Sie Ihr eigenes CInternetSession-Objekt ableiten, OnStatusCallback überschreiben und Statusrückrufe aktivieren, MFC ruft die Funktion OnStatusCallback mit Statusinformationen zur gesamten Aktivität in dieser Internet-Sitzung auf.

Da eine einzelne Sitzung kann mehrere Verbindungen unterstützte (die möglicherweise, über die Lebensdauer, viele unterschiedliche verschiedene Operationen ausgeführt haben), OnStatusCallback einen Mechanismus, um jeder Statusänderung mit eine bestimmte Verbindung oder einer Transaktion zu identifizieren. Dieser Mechanismus vom Kontext-ID-Parameter bereitgestellt wird, der für viele der Memberfunktionen in der WinInet-Unterstützung gegeben wird, unterschieden. Dieser Parameter ist immer vom Typ DWORD und wird immer dwContext.

Der Kontext, der einem bestimmten Internet-Objekt zugewiesen wird, ist, um die Aktivität nur zu identifizieren die im OnStatusCallback-Objektursachen Member des CInternetSession-Objekts. Der Aufruf von OnStatusCallback werden einige Parameter; diese Parameter arbeiten zusammen, um der Anwendung zu kommunizieren, welche Fortschritte erzielt wurde, für den Transaktionen und Verbindung.

Wenn Sie ein CInternetSession-Objekt erstellen, können Sie einem dwContext-Parameter dem Konstruktor angeben. CInternetSession selbst wird nicht die Kontext-ID; Stattdessen wird die Kontext-ID an alle InternetConnection abgeleitete Objekte angezeigt, die nicht explizit eine Kontext-ID von eigenen abrufen. Im Gegenzug übergeben diese Objekte die CInternetConnection Kontext-ID entlang zu CInternetFile-Objekten, die diese erstellen, wenn Sie nicht explizit eine unterschiedliche Kontext ID angeben Wenn Sie aber eine bestimmte Kontext-ID von eigenen, das Objekt angeben und Arbeit, die sie gar, Kontext mit dieser ID zugeordnet ist Sie können die Kontext-IDs verwenden, um zu ermitteln, welche Statusinformationen Sie in Ihrer OnStatusCallback-Funktion angegeben werden.

Anzeigen von Statusinformationen an, während das Übertragen Dateien

Wenn Sie eine Anwendung schreiben, die eine Verbindung mit einem FTP-Server erstellt, um eine Datei zu lesen und auch mit einem HTTP-Server herstellt, um eine Webseite abzurufen, haben Sie ein CInternetSession-Objekt, zwei CInternetConnection-Objekte (Verwendung wäre CFtpSession sein und das andere wird CHttpSession sein) und zwei CInternetFile-Objekte (eine für jede Kombination). Wenn Sie verwendete Standardwerte für die Parameter dwContext, wird nicht in der Lage, zwischen den Aufrufen OnStatusCallback zu unterscheiden, der Status für die FTP-Verbindung und die Aufrufe angeben, die den Status für die HTTP-Verbindung angeben. Wenn Sie eine ID dwContext angeben, die für in OnStatusCallback im Folgenden testen können, wissen Sie, welcher Vorgang den Rückruf generiert.

Siehe auch

Konzepte

Grundlagen der MFC-Internetprogrammierung

Win32-Interneterweiterungen (WinInet)