Compartilhar via


Noções básicas do WinInet

Você pode usar WinInet para adicionar suporte a FTP para download e upload de arquivos a partir de seu aplicativo.Você pode substituir OnStatusCallback e use o dwContext parâmetro para fornecer informações de progresso aos usuários como procurar e baixar arquivos.

Este artigo contém os seguintes tópicos:

  • Criar um navegador muito Simple

  • Faça o download de uma página da Web

  • Um arquivo de FTP

  • Recuperar um diretório Gopher

  • Exibir informações de progresso durante a transferência de arquivos

Os trechos de código abaixo demonstram como criar um simple navegador, faça o download de uma página da Web, arquivo, FTP e procure um arquivo gopher.Não são indicados como exemplos completos e nem todos contêm o tratamento de exceção.

Para obter informações adicionais sobre WinInet, consulte Extensões de Internet do Win32 (WinInet).

Criar um navegador muito 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();
}

Faça o download de uma página da 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();
}

Um arquivo de 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();
}

Recuperar um diretório 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();
}

Usar OnStatusCallback

Ao usar as classes de WinInet, você pode usar o OnStatusCallback membro de seu aplicativo CInternetSession objeto para recuperar informações de status.Se você derivar seus próprios CInternetSession de objeto, substituir OnStatusCallbacke habilitar retornos de chamada de status, MFC irá chamar seu OnStatusCallback função com informações de progresso sobre todas as atividades na sessão da Internet.

Porque uma única sessão pode oferecer suporte a várias conexões (que, ao longo de sua vida útil, podem realizar muitas operações diferentes diferentes), OnStatusCallback precisa de um mecanismo para identificar cada alteração de status com uma conexão específica ou uma transação.Esse mecanismo é fornecido pelo parâmetro de ID de contexto fornecido para muitas funções membro nas classes de suporte do WinInet.Este parâmetro é sempre do tipo DWORD e sempre é chamado de dwContext.

O contexto atribuído a um determinado objeto de Internet é usado apenas para identificar a atividade que faz com que o objeto de OnStatusCallback membro do CInternetSession objeto.A chamada para OnStatusCallback recebe vários parâmetros; Estes parâmetros funcionam juntos para informar ao seu aplicativo que progresso foi feito para a conexão e transação.

Quando você cria um CInternetSession o objeto, você pode especificar um dwContext parâmetro para o construtor.CInternetSessionSe não usa a identificação de contexto; em vez disso, ele passa a identificação de contexto para qualquer InternetConnection-derivado objetos explicitamente não obtém uma identificação de contexto de suas próprias.Por sua vez, os CInternetConnection objetos passará a identificação de contexto junto a CInternetFile objetos que criam se você não especificar explicitamente uma identificação de contexto diferente.Se, por outro lado, especificar uma identificação de contexto específico de sua preferência, o objeto e qualquer trabalho será associado com essa identificação de contexto.Você pode usar o contexto IDs para identificar quais informações de status está sendo fornecidas no seu OnStatusCallback função.

Exibir informações de progresso durante a transferência de arquivos

Por exemplo, se você escrever um aplicativo que cria uma conexão com um servidor FTP para ler um arquivo e também se conecta a um servidor HTTP para uma página da Web, você terá uma CInternetSession objeto, dois CInternetConnection objetos (uma seria uma CFtpSession e o outro seria uma CHttpSession) e dois CInternetFile objetos (um para cada conexão).Se você usou valores padrão para o dwContext parâmetros, você não seria capaz de distinguir entre o OnStatusCallback invocações indicam o progresso para a conexão FTP e invocações de indicam o progresso da conexão HTTP.Se você especificar um dwContext ID, que posteriormente você pode testar em OnStatusCallback, você saberá qual operação gerou o retorno de chamada.

Consulte também

Conceitos

Noções básicas de programação de Internet do MFC

Extensões de Internet do Win32 (WinInet)