Enviar archivos a un SFTP con WinInet.dll

1,354 views
Skip to first unread message

Oscar Calderon

unread,
Feb 24, 2012, 1:36:09 PM2/24/12
to publice...@googlegroups.com
Estimados señores del foro,

En VFP para automatizar la subida de archivos a nuestro FTP interno (puerto 21) utilizo las funciones de WinInet.dll con una rutina que encontré en Portalfox en alguna ocasión; todo bien. Pero se me presenta el problema que ahora necesito enviar archivos a un FTP seguro externo (SFTP puerto 22). ¿Alguien de ustedes a trabajado con esto en WinInet y me pueda explicar como hacerlo?. Por el momento he logrado la conexión y el acceso con el cliente FTP Filezilla, pero la idea automatizar la subida desde la misma aplicación.

Saludos,

--
Oscar Calderón Fuentes
Santiago - Chile
 

Marco Plaza

unread,
Feb 24, 2012, 2:28:53 PM2/24/12
to Comunidad de Visual Foxpro en Español
Descarga vfpconnection.fll tiene todo lo que necesitas y mas.

http://www.sweetpotatosoftware.com/spsblog/2008/12/05/VFPConnectionUpdateHTTPPostFTPCommandsAndMore.aspx

Saludos


On 24 feb, 14:36, Oscar Calderon <ocalder...@gmail.com> wrote:
> Estimados señores del foro,
>
> En VFP para automatizar la subida de archivos a nuestro FTP interno (puerto
> 21) utilizo las funciones de WinInet.dll con una rutina que encontré en
> Portalfox en alguna ocasión; todo bien. Pero se me presenta el problema que
> ahora necesito enviar archivos a un FTP seguro externo (SFTP puerto 22).
> ¿Alguien de ustedes a trabajado con esto en WinInet y me pueda explicar
> como hacerlo?. Por el momento he logrado la conexión y el acceso con el
> cliente FTP *Filezilla*, pero la idea automatizar la subida desde la misma
> aplicación.
>
> Saludos,
>
> --
> *Oscar Calderón Fuentes*
> *Santiago - Chile*

Oscar Calderon

unread,
Feb 24, 2012, 2:56:05 PM2/24/12
to publice...@googlegroups.com
Esta FLL la tengo, pero no le veo una función que transfiera archivos via SFTP, que no es lo mismo que FTPS.

Marco Plaza

unread,
Feb 24, 2012, 3:56:17 PM2/24/12
to Comunidad de Visual Foxpro en Español
Hola Oscar, tienes razón, esa función no está en esa fll. FTPS es a
través de una conexión segura. Creo que no vas a conseguir una forma
nativa o con llamadas a windows, pues WinInet no soporta ftps.

Chequea este link:

http://www.chilkatsoft.com/chilkatftp.asp

Saludos

Marco Plaza


On 24 feb, 15:56, Oscar Calderon <ocalder...@gmail.com> wrote:
> Esta FLL la tengo, pero no le veo una función que transfiera archivos via
> SFTP, que no es lo mismo que FTPS.
>
> El 24 de febrero de 2012 16:28, Marco Plaza <stmapw...@gmail.com> escribió:
>
>
>
>
>
>
>
>
>
> > Descarga vfpconnection.fll tiene todo lo que necesitas y mas.
>
> >http://www.sweetpotatosoftware.com/spsblog/2008/12/05/VFPConnectionUp...

Oscar Calderon

unread,
Feb 24, 2012, 4:32:04 PM2/24/12
to publice...@googlegroups.com
OK, gracias. Es lo que necesitaba saber.

¿tienes alguna idea de como podría lograr dicha conexión?

Marco Plaza

unread,
Feb 24, 2012, 4:34:57 PM2/24/12
to Comunidad de Visual Foxpro en Español
Librerías de terceros, como la que te mencioné en el link ( chilkat
por ejemplo ).

http://www.chilkatsoft.com/chilkatftp.asp



On 24 feb, 17:32, Oscar Calderon <ocalder...@gmail.com> wrote:
> OK, gracias. Es lo que necesitaba saber.
>
> ¿tienes alguna idea de como podría lograr dicha conexión?
>

Allan Raúl Acuña

unread,
Feb 24, 2012, 4:47:08 PM2/24/12
to publice...@googlegroups.com
Revisa este Link


Pésame tu correo para enviarte todo el código.

Saludos cordiales;

Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
            +(505) 8 831 8191      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica


> Date: Fri, 24 Feb 2012 13:34:57 -0800
> Subject: [vfp] Re: Enviar archivos a un SFTP con WinInet.dll
> From: stma...@gmail.com
> To: publice...@googlegroups.com

Allan Raúl Acuña

unread,
Feb 24, 2012, 4:48:44 PM2/24/12
to publice...@googlegroups.com
Acá un código, prueba.

-------------------------------------------------------------------------------------------
**
** COMO SUBIR UN ARCHIVO A UNA PÁGINA WEB CON VFP.
**

#DEFINE GENERIC_READ    2147483648   && &H80000000
#DEFINE GENERIC_WRITE   1073741824   && &H40000000

PUBLIC HOPEN, HFTPSESSION
DECLARE INTEGER INTERNETOPEN IN WININET.DLL;
    STRING  SAGENT,;
    INTEGER LACCESSTYPE,;
    STRING  SPROXYNAME,;
    STRING  SPROXYBYPASS,;
    STRING  LFLAGS

DECLARE INTEGER INTERNETCLOSEHANDLE IN WININET.DLL;
    INTEGER HINET

DECLARE INTEGER INTERNETCONNECT IN WININET.DLL;
    INTEGER HINTERNETSESSION,;
    STRING  SSERVERNAME,;
    INTEGER NSERVERPORT,;
    STRING  SUSERNAME,;
    STRING  SPASSWORD,;
    INTEGER LSERVICE,;
    INTEGER LFLAGS,;
    INTEGER LCONTEXT

DECLARE INTEGER FTPOPENFILE IN WININET.DLL;
    INTEGER HFTPSESSION,;
    STRING  SFILENAME,;
    INTEGER LACCESS,;
    INTEGER LFLAGS,;
    INTEGER LCONTEXT

DECLARE INTEGER INTERNETWRITEFILE IN WININET.DLL;
    INTEGER   HFILE,;
    STRING  @ SBUFFER,;
    INTEGER   LNUMBYTESTOWRITE,;
    INTEGER @ DWNUMBEROFBYTESWRITTEN

** SELECCIONAMOS EL SERVIDOR FTP, CON UN NIVEL DE ACCESO APROPIADO.
** NO USAR UN ACCESO ANÓNIMO.
IF CONNECT2FTP ("FPT.???.???", "USUARIO", "PASSWORD")
    LCSOURCEPATH = "C:\TEMP"       && DIRECTORIO LOCAL
    LCTARGETPATH = "ARCHIVOS/"      && DIRECTORIO DE FTP DESTINO
    LNFILES = ADIR (ARR, LCSOURCEPATH + "*.HTM")

    FOR LNCNT=1 TO LNFILES
        LCSOURCE = LCSOURCEPATH + LOWER (ARR [LNCNT, 1])
        LCTARGET = LCTARGETPATH + LOWER (ARR [LNCNT, 1])
        ? LCSOURCE + " -> " + LCTARGET
        ?? LOCAL2FTP (HFTPSESSION, LCSOURCE, LCTARGET)
    ENDFOR

    = INTERNETCLOSEHANDLE (HFTPSESSION)
    = INTERNETCLOSEHANDLE (HOPEN)
ENDIF

**--------------------------------------------
** ESTABLECEMOS LA CONEXIÓN
**--------------------------------------------
FUNCTION  CONNECT2FTP (STRHOST, STRUSER, STRPWD)
   ** ABRIMOS EL ACCESO.
    HOPEN = INTERNETOPEN ("VFP", 1, 0, 0, 0)

    IF HOPEN = 0
        ? "NO TIENE ACCESO A WININET.DLL"
        RETURN .F.
   ENDIF

    ** CONECTANDO AL FTP.
    HFTPSESSION = INTERNETCONNECT (HOPEN, STRHOST, 0, STRUSER, STRPWD, 1, 0,
0)

    IF HFTPSESSION = 0
        ** CERRANDO ACCESO Y SALIENDO.
        = INTERNETCLOSEHANDLE (HOPEN)
        ? "FTP " + STRHOST + " NO ESTÁ DISPONIBLE"
        RETURN .F.
     ELSE
         ? "CONECTADO A " + STRHOST + " COMO: [" + STRUSER + ", *****]"
   ENDIF
RETURN .T.


**--------------------------------------------
** COPIA DEL/LOS ARCHIVOS
**--------------------------------------------
FUNCTION LOCAL2FTP (HCONNECT, LCSOURCE, LCTARGET)
    ** COPIANDO EL ARCHIVO LOCAL AL DIRECTORIO REMOTO FTP.
    HSOURCE = FOPEN (LCSOURCE)
    IF (HSOURCE = -1)
        RETURN -1
    ENDIF

    ** CREAMOS EL NUEVO ARCHIVO
    HTARGET = FTPOPENFILE(HCONNECT, LCTARGET, GENERIC_WRITE, 2, 0)
    IF HTARGET = 0
       = FCLOSE (HSOURCE)
       RETURN -2
    ENDIF
    LNBYTESWRITTEN = 0
    LNCHUNKSIZE = 256    && 128, 512
    DO WHILE NOT FEOF(HSOURCE)
        LCBUFFER = FREAD (HSOURCE, LNCHUNKSIZE)
        LNLENGTH = LEN(LCBUFFER)
        IF LNLENGTH > 0
           IF INTERNETWRITEFILE (HTARGET, @LCBUFFER, LNLENGTH, @LNLENGTH) =
1
                LNBYTESWRITTEN = LNBYTESWRITTEN + LNLENGTH
                ** PODEMOS MOSTRAR AQUÍ EL PROGRESO DE LA OPERACIÓN
           ELSE
                EXIT
           ENDIF
        ELSE
            EXIT
        ENDIF
   ENDDO

   = INTERNETCLOSEHANDLE (HTARGET)
   = FCLOSE (HSOURCE)

RETURN  LNBYTESWRITTEN

------------------------------------------------------------
Mis saludos antes que nada.


Saludos cordiales;

Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
            +(505) 8 831 8191      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica



From: allan...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Re: Enviar archivos a un SFTP con WinInet.dll
Date: Fri, 24 Feb 2012 21:47:08 +0000

Oscar Calderon

unread,
Feb 24, 2012, 5:25:07 PM2/24/12
to publice...@googlegroups.com
Allan,

Este código lo tengo hace mucho y es el ocupo normalmente. Pero para efectos de protocolo "SFTP" (no confundir con FTPS) no sirve.

Saludos,

Allan Raúl Acuña

unread,
Feb 24, 2012, 5:31:24 PM2/24/12
to publice...@googlegroups.com
Seguiré buscando

Saludos

Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
            +(505) 8 831 8191 begin_of_the_skype_highlighting            +(505) 8 831 8191      end_of_the_skype_highlighting      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica



Date: Fri, 24 Feb 2012 19:25:07 -0300
Subject: Re: [vfp] Re: Enviar archivos a un SFTP con WinInet.dll
From: ocald...@gmail.com
To: publice...@googlegroups.com
Saludos,



Saludos cordiales;

Martin Peveri

unread,
Apr 25, 2013, 2:58:14 PM4/25/13
to publice...@googlegroups.com
Tengo el mismo problema, alguna solución para esto?.

Gracias 
Reply all
Reply to author
Forward
0 new messages