Page 1 of 2

Descarga desde https SOLUCIONADO

Posted: Mon Sep 02, 2019 12:40 am
by FranciscoA
Hola amigos.
Estoy probando descarga de ficheros desde una URL.
Se que hay bastante informacion en el foro, y por supuesto, desde aquí he tomado muestras para lo que codifiqué.

El siguiente codigo compila y se ejecuta, pero el bendito fichero (supuestamente descargado) no está por ningún lado.

Pueden decirme que he omitido, o hago mal, en el ejemplo siguiente?

Code: Select all

function DescargFichDesdeUrl()
   local cFile := "d:\fapsoft_foro\franco.png"
   local cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"

   ? DELETEURLCACHEENTRY( cUrl )     //Retorna .f.

   ? URLDOWNLOADTOFILE( 0, cUrl, cFile )    //Retorna -2146697208
 
RETURN NIL

DLL STATIC FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 
Saludos.

PD: Solucion en
http://fivetechsupport.com/forums/viewt ... 43#p225509

Re: Descarga desde https

Posted: Mon Sep 02, 2019 1:23 pm
by karinha

Code: Select all

#include "FiveWin.ch"

function DescargFichDesdeUrl()

   //local cFile := "d:\fapsoft_foro\franco.png"    // ERRO: NOMBRE ERRADO.
   LOCAL cFile       := "C:\Download\Fivetechv.png" // Nombre correcto.
   LOCAL cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"

   ? DELETEURLCACHEENTRY( cUrl )          // Retorna .T.

   // Mira C:\Downlod -> Fivetechv.png
   URLDOWNLOADTOFILE( 0, cUrl, cFile )
 
RETURN NIL

DLL FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL ;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 
 

Re: Descarga desde https

Posted: Mon Sep 02, 2019 3:28 pm
by FranciscoA
Joao, gracias por responder.
Hice lo que sugeriste, pero sigue lo mismo: no descarga el fichero.
Aqui está el código.

Lo raro es que Silvio usó mi código y tanto él como Ukoenig confirman que les funciona. No se por qué a mi no.
http://fivetechsupport.com/forums/viewt ... f3#p225433

- Funciona sólo en HARBOUR?
- Tengo que hacer alguna configuración en mi equipo?
- Algo mas?

Code: Select all

function DescargFichDesdeUrl()
   local cFile := "c:\downloads\Fivetechv.png"
   local cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"

   ? DELETEURLCACHEENTRY( cUrl )

   ? URLDOWNLOADTOFILE( 0, cUrl, cFile )
 
RETURN NIL

DLL STATIC FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 
Alguna otra idea?

Saludos.

Re: Descarga desde https

Posted: Mon Sep 02, 2019 4:19 pm
by karinha
Image

Re: Descarga desde https

Posted: Mon Sep 02, 2019 4:51 pm
by karinha
Creo, sea tú versión.

Saludos.

Re: Descarga desde https

Posted: Mon Sep 02, 2019 5:14 pm
by FranciscoA
Joao.
Agradezco tu atención y tiempo.
Ya funcionó.
Lo probé con el sitio de Ukoenig y todo ok, por lo que deduzco que el fichero de fivetech del ejemplo no existe.
http://fivetechsupport.com/forums/viewt ... f3#p225433
Saludos.

Code: Select all

#include "FiveWin.ch"

function DescargFichDesdeUrl()
local nRet
*local cFile := "d:\fapsoft__foro\DcgaHttps\Fivetechv.png"
*local cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"

local cFile := "d:\fapsoft__foro\DcgaHttps\GDItest1_.zip"
local cUrl  := "http://www.Pflegeplus.com/DOWNLOADS/Gditest1.zip"


   DELETEURLCACHEENTRY( cUrl )

   nRet := URLDOWNLOADTOFILE( 0, cUrl, cFile ) 
   
   if nRet == 0
      MsgInfo("Fichero guardado como " + cFile )
   else
      MsgStop("Fichero no fué descargado.","Error")
   endif 

RETURN NIL

DLL STATIC FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 

Re: Descarga desde https

Posted: Mon Sep 02, 2019 5:29 pm
by FranciscoA
FranciscoA wrote: ... por lo que deduzco que el fichero de fivetech del ejemplo no existe.
Corrijo: El fichero mencionado existe, pero no se por qué no lo descarga.
Saludos.

Re: Descarga desde https

Posted: Mon Sep 02, 2019 5:43 pm
by karinha
Aqui descarga bién. Saludos.

Re: Descarga desde https

Posted: Mon Sep 02, 2019 9:31 pm
by FranciscoA
Confirmo.
Hice pruebas con diversos sitios y funciona perfectamente con direcciones que empiezan con HTTP.
Es decir, no me funciona con direcciones HTTPS.
He "GooGleado" sobre esto, pero no he encontrado algo que me indique qué hacer. (solo explicación de que la diferencia entre estos dos es unicamente la seguridad)
¿Pueden orientarme al respecto?.
Saludos.

Re: Descarga desde https

Posted: Tue Sep 03, 2019 12:42 pm
by karinha

Re: Descarga desde https

Posted: Tue Sep 03, 2019 4:35 pm
by FranciscoA
Karinha, gracias por el link.
El codigo donde llama a URLDOWNLOADTOFILE es igual al mio.
Ahi usan http, y el problema mio es con [b]https[/b].

Puedes probar el siguiente codigo con FW 1204, por favor?

Code: Select all

#include "FiveWin.ch"

function DescargFichDesdeUrl()
local cFile, cUrl, aFich :={},aFiles:={}

   cFile := "c:\download\Fivetechv.png"
   cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"     // HTTPS
   aadd(aFich,{cUrl,cFile})

   cFile := "c:\download\PruebaGDI_.zip"
   cUrl  := "http://www.Pflegeplus.com/DOWNLOADS/Gditest1.zip"    // http
   aadd(aFich,{cUrl,cFile})

   AEval(aFich,{|a,n| Descargando( aFich[n,1],aFich[n,2],aFiles ) })

   XBROWSE( aFiles, "DESCARGAS" )
RETURN NIL

//--------------------------------------------------------//
Function Descargando(cUrl,cFile,aFiles)
local nRet

   MsgRun("Aguarde por favor, descargando...",,{|| ;
           DELETEURLCACHEENTRY( cUrl ) ,;
           nRet := URLDOWNLOADTOFILE( 0, cUrl, cFile ), SysRefresh() })
   
   if nRet == 0
      aadd( aFiles,{cUrl, cFile} )
   else
      aadd( aFiles,{cUrl, "Descarga ha fallado" +"  INET_E_DOWNLOAD_FAILURE (0x800C0008L or -2146697208)" } )
      MsgInfo(nRet,"Error INET")
   endif 

RETURN NIL

DLL STATIC FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 
Gracias.

Re: Descarga desde https

Posted: Tue Sep 03, 2019 5:08 pm
by karinha
No tengo tú versión Francisco. Mira, funciona bién.

Image

Re: Descarga desde https

Posted: Tue Sep 03, 2019 5:12 pm
by karinha

Code: Select all

#include "FiveWin.ch"

function DescargFichDesdeUrl()

   local cFile, cUrl, aFich :={},aFiles:={}

   cFile := "c:\download\Fivetechv.png"  // funciona.

   cUrl  := "https://bitbucket.org/fivetech/fivewin-contributions/downloads/Fivetechv.png"     // HTTPS

   aadd(aFich,{cUrl,cFile})

   cFile := "c:\download\PruebaGDI_.zip"  // funciona
   // cFile := "c:\download\Gditest1.zip" // funciona

   cUrl  := "http://www.Pflegeplus.com/DOWNLOADS/Gditest1.zip"    // http

   aadd(aFich,{cUrl,cFile})

   AEval(aFich,{|a,n| Descargando( aFich[n,1],aFich[n,2],aFiles ) })

   XBROWSE( aFiles, "DESCARGAS" )

RETURN NIL

//--------------------------------------------------------//
Function Descargando(cUrl,cFile,aFiles)
local nRet

   MsgRun("Aguarde por favor, descargando...",,{|| ;
           DELETEURLCACHEENTRY( cUrl ) ,;
           nRet := URLDOWNLOADTOFILE( 0, cUrl, cFile ), SysRefresh() })
   
   if nRet == 0
      aadd( aFiles,{cUrl, cFile} )
   else
      aadd( aFiles,{cUrl, "Descarga ha fallado" +"  INET_E_DOWNLOAD_FAILURE (0x800C0008L or -2146697208)" } )
      MsgInfo(nRet,"Error INET")
   endif 

RETURN NIL

DLL STATIC FUNCTION DELETEURLCACHEENTRY( cUrl AS LPSTR ) AS BOOL;
    PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"

DLL FUNCTION URLDOWNLOADTOFILE( pCaller AS LONG, cUrl AS LPSTR, cFileName AS LPSTR, nReserved AS DWORD, nFnCB AS LONG ) AS LONG;
    PASCAL FROM "URLDownloadToFileA" LIB "urlmon.dll"
 

Re: Descarga desde https

Posted: Tue Sep 03, 2019 5:35 pm
by FranciscoA
Joao:
Muchas gracias por tu colaboración.
Voy a presentar el codigo a colegas que puedan tener la version FW 1204.

Saludos.

Re: Descarga desde https

Posted: Tue Sep 03, 2019 7:44 pm
by Sistem
deve ser algo no host

If DowlFile("https://bitbucket.org/fivetech/fivewin- ... etechv.png", "e:\Fivetechv.png") // Retorna NAO OK
? "ok"
Else
? "NAO OK"
Endif

If DowlFile("http://www.Pflegeplus.com/DOWNLOADS/Gditest1.zip", "e:\Fivetechv.png") // RETORNA OK
? "ok
Else
? "NAO OK"
Endif

//--------------------------------------------------------------------------------
Function DowlFile(cLink, cDest)
Local oXMLHTTP, oADODBStream, lOk:=.f.

oXMLHTTP := CREATEOBJECT( "Microsoft.XMLHTTP" )
oADODBStream := CREATEOBJECT( "Adodb.Stream" )
oXMLHTTP:Open( "GET", cLink, .f. )
oXMLHTTP:Send()

If oXMLHTTP:Status() == 200
oADODBStream:Type := 1
oADODBStream:Open()
oADODBStream:Write( oXMLHTTP:ResponseBody )
oADODBStream:SaveToFile( cDest, 2 )
// MsgAlert("Download feito, ok", "Aviso")
lOk:=.t.
Else
// MsgAlert("Erro com download", "Aviso")
lOk:=.f.
Endif

Return lOk