Основные сведения о WinInet
Можно использовать WinInet добавление поддержки FTP, чтобы загрузить и передавать файлы из приложения. Можно переопределить OnStatusCallback и используйте параметр dwContext для реализации информацию о ходе выполнения пользователи как для поиска и загрузите файлы.
Этот раздел содержит следующие подразделы:
Создайте очень простой браузер
Загрузите страницу
Файл FTP
Извлечение каталог gopher
Отображает сведения о ходе выполнения во время перемещающ файлы
Извлечь кода демонстрируют, как создать простой браузер, загрузят страницы, FTP файл и поиск файла gopher. Они не предназначены для как полные примеры и не содержат все обработку исключений.
Дополнительные сведения о WinInet см. в разделе Расширения Win32 Интернета (WinInet).
Создайте очень простой браузер
#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();
}
Загрузите страницу
//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
#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();
}
Извлечение каталог 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();
}
Используйте OnStatusCallback
При использовании классов WinInet, можно использовать элемент OnStatusCallback объекта CInternetSession приложения извлечь сведения о состоянии. Если производный объект CInternetSession, переопределите OnStatusCallback и включить обратные вызовы состояния, MFC вызывает пользовательскую функцию OnStatusCallback со сведениями о ходе выполнения о работе полностью в этом сеансе Интернета.
Поскольку один сеанс может поддерживать несколько подключений (, по своим времени существования, можно выполнять различные определенных операций), OnStatusCallback требуется механизм определения каждое изменение состояния с указанными подключение или транзакцией. Механизм, предоставляется параметром контекстного идентификатора, присвоенное многие функции-члены в классах поддержки WinInet. Этот параметр всегда типа DWORD и всегда имеет имя dwContext.
Контекст, в частности объект Интернета используется только для определения причины работы объекта в элементе OnStatusCallback объекта CInternetSession. Вызов OnStatusCallback получит несколько параметров; эти параметры работают вместе, чтобы сообщить приложению о ходе выполнения, выполненной для которого транзакции и подключение.
При создании объекта CInternetSession можно указать параметр dwContext в конструктор. CInternetSession сам не использует контекстный идентификатор; вместо этого он передает контекстный идентификатор и перейти к любому InternetConnection- производным объектам, которые явно не задает контекстный идентификатор их. В свою очередь, эти объекты CInternetConnection загружают контекстный идентификатор вперед к объектам CInternetFile они создают, если явно не указан идентификатор другого контекста Если, с другой стороны, нужно задать конкретный контекстный идентификатор, объект, и любой рабочий она позволяет связать с этим идентификатором контекста Можно использовать идентификатор контекста указать сведения о состоянии указан в функции OnStatusCallback.
Отображает сведения о ходе выполнения во время перемещающ файлы
Например, если нужно создать приложение, которое создает соединение с FTP-сервером для считывания файла, а также подключиться к HTTP-серверу для доступа к странице будет создан объект CInternetSession, 2 объекта CInternetConnection (один будет CFtpSession и другой будет CHttpSession) и 2 объекта CInternetFile (по одному для каждого соединения). При использовании значения по умолчанию для параметров dwContext, то, возможно, будет различать вызовами OnStatusCallback, отражающих прогресс для подключения FTP и вызовы, отражающих прогресс для подключения HTTP. Если указан идентификатор dwContext, которое можно более новый тест в OnStatusCallback необходимо узнать, какая операция генерировала обратный вызов.