Notions WinInet

Vous pouvez utiliser WinInet pour ajouter la prise en charge FTP et pour télécharger les fichiers de votre application.Vous pouvez substituer OnStatusCallback et utiliser le paramètre d' dwContext pour fournir les informations de progression aux utilisateurs lorsque vous recherchez des fichiers téléchargés.

Cet article contient les rubriques suivantes :

  • Créez un navigateur très simple

  • Téléchargez une page Web

  • FTP un fichier

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

  • Les informations de progression d'affichage en transférant les fichiers

Les extraits de code suivantes montrent comment créer un navigateur simple, télécharger une page Web, un serveur FTP un fichier, et rechercher un fichier de Gopher.Ils ne sont pas signifiés comme exemples complets et pas tous contiennent la gestion des exceptions.

Pour plus d'informations sur WinInet, consultez l' 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échargez 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();
}

FTP un fichier

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

Utilisation OnStatusCallback

En utilisant les classes WinInet, vous pouvez utiliser le membre d' OnStatusCallback de l'objet de CInternetSession de votre application pour récupérer des informations d'état.Si vous dérivez votre propre objet d' CInternetSession , substituez OnStatusCallback, et activez les rappels d'état, MFC appelle votre fonction d' OnStatusCallback avec les informations de progression sur toute l'activité dans cette session Internet.

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

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

Lorsque vous créez un objet d' CInternetSession , vous pouvez spécifier un paramètre d' dwContext au constructeur.CInternetSession lui-même n'utilise pas l'ID de contexte ; à la place, il transmet l'ID de contexte à tout InternetConnection- les objets dérivés qui ne sont pas explicitement un ID de contexte de leur.Ensuite, ces objets d' CInternetConnection aboutissent l'ID de contexte le long aux objets d' CInternetFile qu'ils créent si vous ne spécifiez pas explicitement un ID différent de contexteSi, en revanche, vous spécifiez un ID de contexte spécifique de votre propre, l'objet et tout travail qu'il effectue sera associé à cet ID de contexteVous pouvez utiliser les identificateurs de contexte pour identifier les informations d'état vous sont données dans la fonction d' OnStatusCallback .

Les informations de progression d'affichage en transférant les fichiers

Par exemple, si vous écrivez une application qui crée une connexion à un serveur FTP pour lire un fichier et se connecte également à un serveur HTTP pour obtenir une page Web, vous aurez un objet d' CInternetSession , deux objets d' CInternetConnection (il serait CFtpSession et l'autre est CHttpSession), et deux objets d' CInternetFile (un pour chaque ligne).Si vous les valeurs par défaut utilisées pour les paramètres d' dwContext , vous ne pouvez pas faire la distinction entre les appels d' 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 d' dwContext , que vous pouvez ensuite tester pour dans OnStatusCallback, vous saurez comment quelle opération a généré le rappel.

Voir aussi

Concepts

Concepts de programmation Internet MFC

Extensions Internet Win32 (WinInet)