Inicio

   Enlaces

   Articulos

   Noticias

 
 

Descarga de archivos de Internet

21-07-2005

Descarga de archivos de Internet

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();
 
 

Página personal de Fernando Marín.