Compartilhar via


Noções básicas de WinInet

Você pode usar WinInet para adicionar suporte de FTP para baixar e carregar arquivos de dentro de seu aplicativo. Você pode substituir OnStatusCallback e usar o parâmetro de dwContext para fornecer informações de progresso para os usuários como você procura por e baixa arquivos.

Este artigo contém os seguintes tópicos:

  • Crie um navegador muito simples

  • Baixar uma página da Web

  • Arquivo FTP

  • Recuperar um diretório de Gopher

  • Exibir informações de progresso quando transferir o arquivo

Os trechos de código a seguir demonstram como criar um navegador simples, para baixar uma página da Web, FTP um arquivo, e pesquisa de um arquivo de Gopher. Não têm significados como os exemplos completos e nem todos contêm a manipulação de exceção.

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

Crie um navegador muito simples

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

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

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

Use OnStatusCallback

Quando usar o WinInet classificará, você pode usar o membro de OnStatusCallback do objeto de CInternetSession do seu aplicativo para recuperar informações de status. Se você deriva seu próprio objeto de CInternetSession , substitui OnStatusCallback, e habilita retornos de chamada de status, o MFC chamará a função de OnStatusCallback com informações de progresso sobre qualquer atividade nessa sessão da Internet.

Como uma única sessão pode dar suporte a várias conexões (que, em seu tempo de vida, podem executar muitas operações distintas diferentes), OnStatusCallback precisa de um mecanismo de identificar cada alteração de status com uma conexão ou uma transação específica. O mecanismo é fornecido pelo parâmetro de ID do contexto determinado a muitas das funções de membro o suporte de WinInet classifica. Esse parâmetro é do tipo sempre DWORD e é chamado sempre dwContext.

O contexto atribuído a um objeto da Internet de detalhes é usado para identificar apenas a atividade as causas do objeto no membro de OnStatusCallback do objeto de CInternetSession . A chamada para OnStatusCallback receber vários parâmetros; esses parâmetros funcionam em conjunto para informar ao seu aplicativo que progresso foi feito para que a transação e conexão.

Quando você cria um objeto de CInternetSession , você pode especificar um parâmetro de dwContext para o construtor. CInternetSession próprio não usa o ID do contexto; em vez disso, passa a ID de contexto sobre a qualquer InternetConnection- os objetos derivados que não obtêm explicitamente um ID do contexto de seus próprios. Por sua vez, esses objetos de CInternetConnection transmitirão a ID do contexto desde a objetos de CInternetFile criam se você não especificar explicitamente outra ID de contexto Se, por outro lado, especifique uma ID específico de sua escolha, o objeto de contexto e qualquer trabalho que faz será associado à ID do contexto Você pode usar as IDs de contexto para identificar quais informações de status que está sendo determinada na função de OnStatusCallback .

Exibir informações de progresso quando transferir o arquivo

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

Consulte também

Conceitos

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

Extensões da Internet Win32 (WinInet)