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í.