Partager via


Notions WinInet

Vous pouvez utiliser WinInet pour ajouter la prise en charge via FTP pour télécharger et installer les fichiers de votre application. Vous pouvez remplacer OnStatusCallback et utiliser le paramètre dwContext pour fournir les informations de progression les utilisateurs voient recherchées et les fichiers téléchargés.

Cet article contient les rubriques suivantes :

  • Créez un navigateur très simple

  • Télécharge une page Web

  • Met un fichier sur un serveur FTP

  • Récupérez un répertoire de Gopher

  • Afficher les informations de progression pendant le transfert classe

Les extraits de code ci-dessous montrent comment créer un simple navigateur, télécharger une page Web, un serveur un fichier, et la recherche d'un fichier de Gopher. Ils ne sont pas concus comme des exemples complets et ne contiennent pas tous un gestionnaire d'exception.

Pour plus d'informations sur WinInet, consultez Extensions Internet Win32 (WinInet).

Créez un navigateur très simple

#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();
}

Télécharge une page Web

//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();
}

Met un fichier sur un serveur FTP

#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();
}

Récupérez un répertoire de Gopher

#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();
}

Utilisez OnStatusCallback

Lors de l'utilisation du WinInet classe, vous pouvez utiliser le membre OnStatusCallback de l'objet CInternetSession de votre application pour extraire les informations d'état. Si vous dérivez votre propre objet CInternetSession, remplacez OnStatusCallback, puis vérifiez les rappels d'état, MFC appelle la fonction OnStatusCallback avec les informations de progression sur toutes les activités dans cette session Internet.

Étant donné qu'une seule session peut prendre en charge plusieurs connexions (qui, à leur durée de vie, peuvent exécuter de nombreuses opérations distinctes), OnStatusCallback a besoin d'un mécanisme pour identifier chaque modification de l'état d'une connexion ou une transaction spécifique. Ce mécanisme est fourni par le paramètre ID de contexte donné à plusieurs fonctions membres des classes de prise en charge de WinInet. Ce paramètre est toujours de type DWORD et est toujours nommé dwContext.

Le contexte affecté à un objet particulier Internet est utilisé pour identifier l'activité les causes de l'objet dans le membre de OnStatusCallback de l'objet de CInternetSession. L'appel à OnStatusCallback accepte plusieurs paramètres ; ces paramètres fonctionnent ensemble pour indiquer à l'application la progression a été effectuée pour laquelle transaction et connexion.

Lorsque vous créez un objet CInternetSession, vous pouvez spécifier un paramètre dwContext au constructeur. CInternetSession lui-même n'utilise pas l'ID du contexte ; au lieu de cela, il transmet l'ID de contexte à tout InternetConnection- les objets dérivés qui n'obtiennent pas explicitement un ID du contexte de leurs propres. Ensuite, ces objets CInternetConnection passeront ID de contexte le long aux objets CInternetFile qu'ils créent si vous ne spécifiez pas explicitement un ID différent de contexte Si, en revanche, vous spécifiez un ID de contexte spécifique de les vôtres, l'objet et tout travail qu'elle exécute est associé à cet ID de contexte Vous pouvez utiliser les ID de contexte pour identifier les informations d'état vous sont fournies dans votre fonction OnStatusCallback.

Afficher les informations de progression pendant le transfert classe

Par exemple, si vous écrivez une application qui crée une connexion à un serveur FTP à lire un fichier et se connecte également à un serveur HTTP pour obtenir une page Web, vous aurez un objet CInternetSession, objets CInternetConnection (il est CFtpSession et l'autre est CHttpSession), et deux objets CInternetFile (un pour chaque connexion). Si vous définissez des valeurs par défaut utilisées pour les paramètres dwContext, vous ne pouvez pas faire la distinction entre les appels OnStatusCallback qui indiquent la progression de la connexion FTP et les appels qui indiquent la progression de la connexion HTTP. Si vous spécifiez un ID dwContext, que vous pouvez ultérieurement pour tester dans OnStatusCallback, vous saurez les opérations a généré le rappel.

Voir aussi

Concepts

Concepts de programmation Internet MFC

Extensions Internet Win32 (WinInet)