Noções básicas do WinInet

Você pode usar o WinInet para adicionar suporte a FTP fazer baixar e carregar de arquivos a partir do seu aplicativo.Você pode substituir OnStatusCallback e usar o dwContext parâmetro para fornecer informações sobre o progresso aos usuários sistema autônomo você Pesquisar para e faça o baixar de arquivos.

Este artigo contém os seguintes tópicos:

  • Criar um navegador muito Simple

  • Fazer o baixar de uma página da Web

  • Um arquivo de FTP

  • Recuperar uma pasta Gopher

  • Exibir informações sobre o andamento do projeto durante a transferência de arquivos

Os trechos de código abaixo demonstram como criar um simples navegador, fazer baixar de uma página da Web, um arquivo, FTP e procurar um arquivo gopher.Não são indicados sistema autônomo exemplos completos e nem todos contêm o tratamento de exceção.

Para obter informações adicionais no WinInet, consulte Extensões do Win32 Internet (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();
}

Fazer o baixar 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 uma pasta 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();
}

Use OnStatusCallback

Quando usando as classes de WinInet, você pode usar o OnStatusCallback membro CInternetSessionobjeto para recuperar informações de status.Se você derivar seus próprios CInternetSession objeto, substituir OnStatusCallbacke permitir retornos de telefonar de status, MFC chamará sua OnStatusCallback função com informações de andamento sobre todas as atividades na sessão da Internet.

Como uma única sessão pode oferecem suporte a várias conexões (que, através de seu tempo de vida, podem realizar muitas operações diferentes diferentes), OnStatusCallback um mecanismo para identificar cada status precisa alterar com uma conexão específica ou a transação. Esse mecanismo é fornecido pelo parâmetro de ID de contexto fornecido para muitas das funções de membro nas classes de suporte do WinInet.Este parâmetro é sempre do tipo DWORD e sempre é nomeado dwContext.

O contexto atribuído a um determinado objeto Internet é usado somente para identificar a atividade que o objeto faz com que o OnStatusCallback membro de CInternetSession objeto. A telefonar para OnStatusCallback recebe vários parâmetros; esses parâmetros funcionam juntas para dizer ao seu aplicativo que andamento foi feito para qual transação e a conexão.

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

Exibir informações sobre o andamento do projeto 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 obter uma página da Web, você terá um CInternetSession objeto, dois CInternetConnection objetos (uma delas seria um CFtpSession e o Outros seria um CHttpSession), and two CInternetFile objetos (um para cada conexão). Se você tiver usado os valores padrão para o dwContext parâmetros, você não conseguiria diferenciar o OnStatusCallback invocações indicam o progresso para a conexão FTP e as chamadas indicam o progresso da conexão HTTP. Se você especificar um dwContext ID, que posteriormente você possa 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 do Win32 Internet (WinInet)