Condividi tramite


Concetti di base su WinInet

È possibile utilizzare WinInet per aggiungere il supporto di FTP per scaricare o caricare file dall'interno dell'applicazione. È possibile eseguire l'override di OnStatusCallback e utilizzare il parametro di dwContext per fornire informazioni sullo stato di avanzamento agli utenti mentre trovato e scaricano i file.

In questo articolo sono i seguenti argomenti:

  • Creare un browser molto semplice

  • Scaricare una pagina Web

  • FTP un file

  • Recuperare una directory di gopher

  • Visualizzare informazioni sullo stato di avanzamento mentre contengono i file

Gli estratti di codice riportato di seguito viene illustrato come creare un browser semplice, scaricare una pagina Web, un server FTP un file e una ricerca di un file di gopher. Permetterne come gli esempi completi e non tutti contengono la gestione delle eccezioni.

Per ulteriori informazioni su WinInet, vedere Estensioni internet Win32 (WinInet).

Creare un browser molto semplice

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

Scaricare una pagina 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 file

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

Recuperare una directory di 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();
}

Utilizzare OnStatusCallback

Quando si utilizza WinInet classi, è possibile utilizzare il membro di OnStatusCallback dell'oggetto di CInternetSession dell'applicazione per recuperare le informazioni sullo stato. Se si deriva il proprio oggetto di CInternetSession, eseguire l'override di OnStatusCallback e si abilita i callback dello stato, MFC chiama la funzione di OnStatusCallback con informazioni sullo stato di avanzamento su qualsiasi attività in tale sessione Internet.

Poiché una singola sessione può supportare diverse connessioni (che, sulla loro durata, potrebbero eseguire molte operazioni distinte diversi), OnStatusCallback richiede un meccanismo di identificare ogni modifica di stato con una connessione o una transazione particolare. Questo meccanismo è specificato dal parametro ID del contesto specificato a molte delle funzioni membro delle classi di supporto WinInet. Questo parametro è sempre di tipo DWORD la cartella radice ed dwContext.

Il contesto assegnato a un determinato oggetto internet viene utilizzato per identificare solo l'attività le cause dell'oggetto nel membro di OnStatusCallback dell'oggetto di CInternetSession. La chiamata a OnStatusCallback riceve diversi parametri; questi parametri vengono utilizzati insieme per indicare all'applicazione che lo sono stati eseguiti per il quale sulla transazione e di connessione.

Quando si crea un oggetto di CInternetSession, è possibile specificare un parametro di dwContext al costruttore. CInternetSession stesso non utilizza l'id del contesto; al contrario, passare l'id del contesto rispetto a qualsiasi InternetConnection- oggetti derivati in modo esplicito non vengano un ID di contesto propri. A sua volta, gli oggetti di CInternetConnection passeranno l'id del contesto in avanti agli oggetti di CInternetFile creano se in modo esplicito non si specifica un ID diverso di contesto Se, invece, si specifica un ID di contesto specifico personalizzati, object e tutto il lavoro svolto verrà associato all'identificazione di contesto È possibile utilizzare il contesto ID per identificare le informazioni sullo stato non fornire un nella funzione di OnStatusCallback.

Visualizzare informazioni sullo stato di avanzamento mentre contengono i file

Ad esempio, si scrive un'applicazione che crea una connessione a un server FTP per leggere un file e si connette a un server HTTP per ottenere una pagina Web, si otterrà un oggetto di CInternetSession, due oggetti di CInternetConnection (uno sarebbe CFtpSession e l'altro è CHttpSession) e due oggetti di CInternetFile (uno per ogni connessione). Se sono stati utilizzati i valori predefiniti per i parametri di dwContext, non è possibile distinguere tra le chiamate di OnStatusCallback che indicano lo stato di avanzamento per la connessione a FTP e le chiamate che indicano lo stato della connessione HTTP. Se si specifica dwContext ID, che successivamente è possibile verificare in OnStatusCallback, sarà possibile riconoscerlo quale operazione ha generato il callback.

Vedere anche

Concetti

Concetti di base della programmazione Internet MFC

Estensioni Internet Win32 (WinInet)