Základy WinInet
Můžete přidat podporu FTP stáhnout a uložit soubory z vaší aplikace WinInet.Můžete přepsat OnStatusCallback a dwContext parametr poskytnout 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č
Stahování webové stránky
Soubor FTP
Načíst adresář protokolu Gopher
Zobrazení informací o pokroku při přenosu souborů
Citáty kód níže ukazují, jak vytvořit jednoduchý prohlížeč, stahování webové stránky, souboru, FTP a gopher soubor.Nejsou určeny jako kompletní příklady a všechny obsahují zpracování výjimek.
Další informace o rozhraní WinInet viz 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();
}
Stahování 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();
}
Soubor 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();
}
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žít OnStatusCallback
Při použití rozhraní WinInet tříd, můžete OnStatusCallback člen vaší aplikace CInternetSession načíst informace o stavu objektu.Pokud jste odvození vlastního CInternetSession objekt, přepsat OnStatusCallbacka Povolit zpětná stav MFC bude volat vaše OnStatusCallback funkce s informací o veškeré činnosti v dané relaci Internet.
Protože relace mohou podporovat více připojení (a které nad jejich životnost může provádět mnoho různých operací odlišné) OnStatusCallback potřebuje mechanismus k identifikaci každé změně stavu s konkrétní připojení nebo transakce.Tento mechanismus zajišťuje parametr ID kontextu mnohé členské funkce tříd podpora rozhraní WinInet k.Tento parametr je vždy typu DWORD a vždy s názvem dwContext.
Kontextu přiřazené k určitému objektu Internet slouží pouze k identifikovat aktivitu způsobuje objekt OnStatusCallback člen CInternetSession objektu.Volání OnStatusCallback přijímá několik parametrů; Tyto parametry společně aplikace zjistit, jaký pokrok byl pro připojení a transakce.
Při vytváření CInternetSession objektu, můžete zadat dwContext parametr konstruktoru.CInternetSessionsamotné nepoužívá ID kontextu; místo toho předá ID kontextu k žádné InternetConnection-odvozené objekty, které nejsou explicitně získat ID kontextu vlastní.V zapnout, ty CInternetConnection objekty budou předávat ID kontextu spolu s CInternetFile objekty vytvářejí, pokud není explicitně zadat jiný kontext ID.Pokud na druhé straně zadáte ID kontextu konkrétní vlastní, objekt a všechny práce je spojena s tímto ID kontextu.ID kontextu lze určit, jaké informace o stavu je podáno ve vaší OnStatusCallback funkce.
Zobrazení informací o pokroku při přenosu souborů
Například pokud píšete aplikaci, která vytvoří připojení k serveru FTP pro čtení souboru a také připojení k serveru HTTP získáte na webové stránce, budete mít CInternetSession objektu, dva CInternetConnection objekty (jeden by CFtpSession a ostatní by CHttpSession) a dva CInternetFile objekty (jeden pro každé připojení).Pokud jsou použity výchozí hodnoty dwContext parametry by není možné rozlišovat mezi OnStatusCallback vyvolání označující průběh připojení FTP a vyvolání, označující průběh připojení HTTP.Pokud zadáte dwContext ID, které lze později otestovat v OnStatusCallback, budete vědět, které operace vytvořila zpětné.