|
Vamos a ver una de las múltiples formas de descarga archivos de Internet, usaremos MFC y CInternetFile que es una de las formas mas fáciles, y nos permitira descargar los archivos de un dominio.
Funciones a utilizar:
CFtpConnection* CFtpConnection::GetFtpConnection(
LPCTSTR pstrServer,
LPCTSTR pstrUserName = NULL,
LPCTSTR pstrPassword = NULL,
INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
BOOL bPassive = FALSE
);
BOOL CFtpConnection::GetFile(
LPCTSTR pstrRemoteFile,
LPCTSTR pstrLocalFile,
BOOL bFailIfExists = TRUE,
DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1
);
Puntos a tener en cuenta:
Tipo de Acceso: Debes tener en cuenta que si haces la descarga con FTP debes crear cuentas FTP en tu dominio web con permiso de descarga o acceder por el puerto 80 HTTP.
Si usas FTP debes definir usuario y password
#define TU_DOMINIO_COM_FTP_USER _T("clave")
#define TU_DOMINIO_COM_FTP_PASSWORD _T("pasword")
Tipo de archivo: Ten en cuenta que para la descarga de archivos de texto (.reg, .txt, .html, ...) en la función pFtpConnection->GetFile debes usar la opción,
FTP_TRANSFER_TYPE_ASCII, y para los archivos binarios (.exe, .dll,...) debes usar la función, FTP_TRANSFER_TYPE_BINARY
Pasos:
1º Crear la conexión
2º Acceder a los archivos
3º Cerrar la conexión
Código:
#include
#define LOCAL_FILES_PATH _T("c:\\tu-programa")
#define TU_DOMINIO_COM_URL _T(www.tu-dominio.com)
#define TU_DOMINIO_COM_IP xxx.xxx.xxx.xxx
#define TU_DOMINIO_COM_FTP_USER _T("clave")
#define TU_DOMINIO_COM_FTP_PASSWORD _T("pasword")
#define TU_DOMINIO_COM_FTP_PUERTO 21
#define TU_DOMINIO_COM_DIRECTORY_WWW _T("/www")
#define TU_DOMINIO_COM_DIRECTORY_CGI _T("/www/cgi")
#define TU_DOMINIO_COM_DIRECTORY_CGI_DATOS _T("/www/cgi/datos")
CInternetSession internetSession;
CFtpConnection* pFtpConnection;
try {
pFtpConnection=internetSession.GetFtpConnection(
//"ftp.microsoft.com" LPCTSTR pstrServer
TU_DOMINIO_COM_URL,
//LPCTSTR pstrUserName = NULL
TU_DOMINIO_COM_FTP_USER,
//LPCTSTR pstrPassword = NULL
TU_DOMINIO_COM_FTP_PASSWORD,
//INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER
TU_DOMINIO_COM_FTP_PUERTO,
FALSE//BOOL bPassive = FALSE
);
}
catch ( CInternetException *pEX) {
TCHAR szError[1024];
if(pEX->GetErrorMessage(szError,1024))
AfxMessageBox(szError);
else
AfxMessageBox("Error al abrir el servidor.");
pEX->Delete();
}
//Descargar ficheros texto
pFtpConnection->SetCurrentDirectory("/www");
SetCurrentDirectory(LOCAL_FILES_PATH);
pFtpConnection->GetFile(
//LPCTSTR pstrRemoteFile
"nombre_tu_archivo_remoto.txt",
//LPCTSTR pstrLocalFile
"nombre_tu_archivo_local.txt",
//BOOL bFailIfExists = TRUE
FALSE,
//DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_NORMAL,
//FTP_TRANSFER_TYPE_BINARY,FTP_TRANSFER_TYPE_ASCII
FTP_TRANSFER_TYPE_ASCII,
//DWORD dwContext = 1
1
);
//Descargar ficheros binarios
pFtpConnection->SetCurrentDirectory("/www");
SetCurrentDirectory(LOCAL_FILES_PATH);
pFtpConnection->GetFile(
//LPCTSTR pstrRemoteFile
"nombre_tu_archivo_remoto.dll",
//LPCTSTR pstrLocalFile
"nombre_tu_archivo_local.dll",
//BOOL bFailIfExists = TRUE
FALSE,
//DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_NORMAL,
//FTP_TRANSFER_TYPE_ASCII,FTP_TRANSFER_TYPE_BINARY
FTP_TRANSFER_TYPE_ASCII,
//DWORD dwContext = 1
1
);
// Cerrar Conexión
if(pFtpConnection!=NULL) {
pFtpConnection->Close();
delete pFtpConnection;
}
internetSession.Close();
|