Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar WinInet para agregar compatibilidad con FTP para descargar y cargar archivos desde la aplicación. Puede invalidar OnStatusCallback y usar el parámetro dwContext para proporcionar información de progreso a los usuarios a medida que busca y descarga archivos.
Ese artículo contiene los siguientes temas:
Los extractos de código siguientes muestran cómo crear un explorador sencillo, descargar una página web, FTP un archivo y buscar un archivo gopher. No están diseñados como ejemplos completos y no todos contienen control de excepciones.
Para obtener más información sobre WinInet, consulta Win32 Internet Extensions (WinInet).
Crear un explorador muy sencillo
#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();
}
Descargar una página 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();
}
FTP a File
#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();
}
Recuperación de un directorio 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();
}
Uso de OnStatusCallback
Al usar las clases WinInet, puede usar el miembro OnStatusCallback del objeto CInternetSession de la aplicación para recuperar la información de estado. Si deriva su propio CInternetSession
objeto, invalida OnStatusCallback
y habilita las devoluciones de llamada de estado, MFC llamará a la OnStatusCallback
función con información de progreso sobre toda la actividad de esa sesión de Internet.
Dado que una sola sesión puede admitir varias conexiones (que, durante su duración, pueden realizar muchas operaciones distintas diferentes), OnStatusCallback
necesita un mecanismo para identificar cada cambio de estado con una conexión o transacción determinada. Ese mecanismo lo proporciona el parámetro de identificador de contexto proporcionado a muchas de las funciones miembro de las clases de soporte de WinInet. Este parámetro siempre es de tipo DWORD y siempre se denomina dwContext.
El contexto asignado a un objeto de Internet determinado solo se usa para identificar la actividad que provoca el objeto en el OnStatusCallback
miembro del CInternetSession
objeto. La llamada a OnStatusCallback
recibe varios parámetros; estos parámetros funcionan conjuntamente para indicar a la aplicación qué progreso se ha realizado para qué transacción y conexión.
Al crear un CInternetSession
objeto, puede especificar un parámetro dwContext para el constructor.
CInternetSession
en sí no se usa el identificador de contexto; en su lugar, pasa el identificador de contexto en a cualquier objeto derivado de InternetConnection que no obtenga explícitamente un identificador de contexto propio. A su vez, esos CInternetConnection
objetos pasarán el identificador de contexto a los CInternetFile
objetos que crean si no especifica explícitamente un identificador de contexto diferente. Por otro lado, si especifica un identificador de contexto específico propio, el objeto y cualquier trabajo que realice se asociará con ese identificador de contexto. Puede usar los identificadores de contexto para identificar qué información de estado se le proporciona en la OnStatusCallback
función.
Mostrar información de progreso al transferir archivos
Por ejemplo, si escribe una aplicación que crea una conexión con un servidor FTP para leer un archivo y también se conecta a un servidor HTTP para obtener una página web, tendrá un CInternetSession
objeto, dos CInternetConnection
objetos (uno CFtpSession
sería y el otro sería ) CHttpSession
y dos CInternetFile
objetos (uno para cada conexión). Si usó valores predeterminados para los parámetros dwContext , no podrá distinguir entre las OnStatusCallback
invocaciones que indican el progreso de la conexión FTP y las invocaciones que indican el progreso de la conexión HTTP. Si especifica un identificador dwContext , que puede probar más adelante en , OnStatusCallback
sabrá qué operación generó la devolución de llamada.
Consulte también
Conceptos básicos de programación de Internet de MFC
Extensiones de Internet win32 (WinInet)