Sdílet prostřednictvím


WinInet – základy

Chcete-li přidat podporu FTP stáhnout a uložit soubory z v rámci aplikace můžete použít WinInet.Můžete přepsat OnStatusCallback a dwContext parametr poskytovat informace o průběhu uživatelům vyhledávat a stahovat soubory.

Tento článek obsahuje následující témata:

  • Vytvořit velmi jednoduchý prohlížeč

  • Stažení webové stránky

  • FTP souboru

  • Načíst adresář protokolu Gopher

  • Zobrazení informací o průběhu při přenosu souborů

Citáty kód níže ukazuje, jak vytvořit jednoduchý prohlížeč, stáhnout webové stránky, FTP souboru a vyhledejte soubor protokolu gopher.Nejsou určeny jako úplné příklady a všechny obsahují zpracování výjimek.

Další informace o rozhraní WinInet naleznete v tématu Rozšíření Win32 Internet (WinInet).

Vytvořit velmi jednoduchý prohlížeč

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

Stažení webové stránky

//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 souboru

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

Načíst adresář protokolu 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();
}

Použití OnStatusCallback

Používáte-li třídy rozhraní WinInet, lze použít OnStatusCallback členem vaší aplikace CInternetSession objekt, který chcete načíst informace o stavu.Pokud odvodíte vlastní CInternetSession objekt, přepsat OnStatusCallbacka Povolit zpětná volání stav, MFC bude volat vaši OnStatusCallback funkce s informací o veškerou činnost v dané relaci Internet.

Vzhledem k tomu, že jedna relace může podporovat více připojení (které, přes jejich životnost provádět mnoho různých různých operací), OnStatusCallback potřebuje mechanismus k identifikaci každé změně stavu transakce nebo konkrétní připojení.Tento mechanismus zajišťuje parametr ID kontextu, vzhledem k mnoha členské funkce tříd podpory rozhraní WinInet.Tento parametr je vždy typu DWORD a vždy s názvem dwContext.

Kontext přiřazený k určitému objektu Internet slouží pouze k identifikaci aktivita způsobuje, že objekt v OnStatusCallback člen CInternetSession objektu.Volání OnStatusCallback obdrží několik parametrů; společně tyto parametry aplikace zjistit, jaký pokrok pro které transakce a připojení.

Při vytváření CInternetSession objektu, můžete zadat dwContext parametr do konstruktoru.CInternetSessionsamotná nepoužívá ID kontextu; Místo toho předá k žádné ID kontextu InternetConnection-odvozené objekty, které nejsou explicitně získat své vlastní ID kontextu.V vypnout, ty CInternetConnection objekty budou předávat ID kontextu podél k CInternetFile objekty vytvářejí, pokud není explicitně zadat jiný kontext ID.Pokud, na druhé straně určit vlastní ID konkrétní kontext, objekt a všechny práce budou spojené s ID tohoto kontextu.Umožňuje určit, jaké informace o stavu právě obdržíte v kontextu ID vaší OnStatusCallback funkce.

Zobrazení informací o průběhu při přenosu souborů

Například, pokud píšete aplikaci, která vytvoří připojení k serveru FTP pro čtení souboru a také se připojí k serveru HTTP webové stránky získat, budete mít CInternetSession objekt, dva CInternetConnection objekty (jeden by být CFtpSession a druhý bude CHttpSession) a dva CInternetFile objekty, (jeden pro každé připojení).Pokud jste použili výchozí hodnoty dwContext parametry, nebyli schopni rozlišit OnStatusCallback volání metody, které určují postup pro připojení FTP a vyvolání, které určují postup pro připojení HTTP.Zadáte-li dwContext ID, které můžete později vyzkoušet v OnStatusCallback, budete vědět, která operace generování zpětného volání.

Viz také

Koncepty

Základy internetového programování v prostředí MFC

Win32 – internetová rozšíření (WinInet)