Buenas,
Ya tengo operativo al 100x100 tanto el UPLOAD, como el DONWLOAD para un servidor SFTP indicandole carpeta origen y destino, en ambas opciones.
Gracias por todo, si alguien necesita el codigo solo tiene que pedirlo.
Saludos
Buenas,
Ya tengo operativo al 100x100 tanto el UPLOAD, como el DONWLOAD para un servidor SFTP indicandole carpeta origen y destino, en ambas opciones.
Gracias por todo, si alguien necesita el codigo solo tiene que pedirlo.
Saludos
#include "c:\harb16\include\hbcurl.ch"
#include "fivewin.ch"
function Main()
? curl_global_init()
? FtpUploadFile( "sftp://10.10.1.6/test.prg", "c:\fwh16\samples\curl.prg" )
? curl_global_cleanup()
return nil
function FtpUploadFile( cUrlFileName, cFileName )
local hCurl, uValue, nResult
if ! empty( hCurl := curl_easy_init() )
? curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrlFileName )
? curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
? curl_easy_setopt( hCurl, HB_CURLOPT_FTPPORT, 22 )
? curl_easy_setopt( hCurl, HB_CURLOPT_USE_SSL, HB_CURLUSESSL_ALL)
? curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .f.)
? curl_easy_setopt( hCurl, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_SFTP )
? curl_easy_setopt( hCurl, HB_CURLOPT_UPLOAD )
? curl_easy_setopt( hCurl, HB_CURLOPT_UL_FILE_SETUP, cFileName )
? curl_easy_setopt( hCurl, HB_CURLOPT_INFILESIZE, hb_vfSize( cFileName ) )
? curl_easy_setopt( hCurl, HB_CURLOPT_USERPWD, "miusuario:mipassword" )
? curl_easy_setopt( hCurl, HB_CURLOPT_FAILONERROR, .T. )
? curl_easy_setopt( hCurl, HB_CURLOPT_FILETIME, .T. )
? curl_easy_setopt( hCurl, HB_CURLOPT_NOPROGRESS, 0 )
? curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
if ( nResult := curl_easy_perform( hCurl ) ) == 0
curl_easy_dl_buff_get( hCurl )
else
? "error code:" + Str( nResult )
endif
endif
return nResult == HB_CURLE_OK#include "c:\harbour\include\hbcurl.ch"
#include "fileio.ch"
function Main()
SftpSubirFichero( "sftp://url_hasta_subidirectorio/nombreficher", "direccion_disco_local\nombre_fichero_que_quieras", "usuario", "contrase帽a" )
return nil
function sFtpSubirFichero( cUrlFileName, cFileName, aUser, aPass )
聽 聽local hCurl
聽 聽local nResult
聽 聽local aaUser := AllTrim(aUser)
聽 聽local aaPass := AllTrim(aPass)
聽 聽local aCadena := aaUser+":"+aaPass
curl_global_init()
聽 聽if ! empty( hCurl := curl_easy_init() )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_SFTP)
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrlFileName )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_UPLOAD )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_UL_FILE_SETUP, cFileName )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_INFILESIZE, hb_vfSize( cFileName ) )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_USERPWD, aCadena )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_TCP_KEEPALIVE, 1 )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, 0 )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, 0 )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, 1 )
聽 聽 聽 curl_easy_setopt( hCurl, HB_CURLOPT_USE_SSL, 0 )
聽 聽 聽 if ( nResult := curl_easy_perform( hCurl ) ) == 0
聽 聽 聽 聽 聽 聽nResult := curl_easy_dl_buff_get( hCurl )
聽 聽 聽 else
聽 聽 聽 聽 聽? "error code:" + Str( nResult )
聽 聽 聽 endif
聽 聽endif
curl_global_cleanup()
return nResultHola,
Lo siento si he ofendido a alguien, pero no era mi intencion, he probado con todos los codigos que me han pasado y otros que he ido encontrando, que parece ser que funcionaban, hasta que he conseguido hacer lo que pretendia. Luego he intentado hacer una funcion mas facil para mi.
Las gracias las he ido dando sistematicamente a todos los que me han ayudado.
Gracias.
FUNCTION sFtpBajarFichero(sUrl, aDirDestino, aFileDestino, aUser, aPass )
LOCAL curl, lOK
local aCadena := AllTrim(aUser+":"+aPass)
local aFicheroFinal := AllTrim(aDirDestino+"\"+aFileDestino)
curl_global_init()
if ! Empty( curl := curl_easy_init() )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_SFTP )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_URL, sUrl )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_USERPWD, aCadena )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, 0 )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, 0 ) 聽
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_FOLLOWLOCATION ) 聽 聽
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_FILETIME, 1)
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_DL_FILE_SETUP,aFicheroFinal)
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 1 )
聽 聽 聽 聽 聽 聽 curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, 1 )
聽 聽 聽 聽 聽 聽 curl_easy_perform( curl )
聽 聽 聽 聽 聽 聽 if curl_easy_perform( curl ) == 0
聽 聽 聽 聽 聽 聽 聽 聽lOK := 1
聽 聽 聽 聽 聽 聽 Else
聽 聽 聽 聽 聽 聽 聽 聽lOK := 0
聽 聽 聽 聽 聽 聽endif
聽 聽 聽 聽 聽 聽 //curl_easy_reset( curl )
endif
curl_global_cleanup()
RETURN lOKhmpaquito wrote:pepe_garcia wrote:Buenas,
Ya tengo operativo al 100x100 tanto el UPLOAD, como el DONWLOAD para un servidor SFTP indicandole carpeta origen y destino, en ambas opciones.
Gracias por todo, si alguien necesita el codigo solo tiene que pedirlo.
Saludos
Perfecto pepe_garcia...
Nos volcamos aqui todos en ayudarte a que te funcione y ahora nos regateas el codigo en vez de dar las gracias y dejar pegado el codigo para cualquiera que alguna vez pase por el foro
Por favor, que nivel maribel
Hola,
Gracias por tu aporte. Seguro que a mucha gente le podr谩 servir. Yo, en mi caso rechac茅 hacer un trabajo sobre SFTP y me pusieron en el servidor en FTP y por supuesto que no les voy a decir que lo cambien, bastante ya tenemos con lo requerimientos que tenemos con el constante bombardeo de legislacion
Una cosa nos tiene que quedar clara a todos, la comunidad en tama帽o es lo que es.
Es casi imposible que entre nosotros lleguemos a ser competencia de algo.
Cuanto m谩s nos ayudemos mejor. En mi caso, casi nunca me he beneficiado de una ayuda directa, aunque si de miles de ayudas indirectas, de otros que tuvieron un problema, abrieron un hilo y alguien o algunos le ayudaron
PD. La primera ayuda directa que recibi y por ello guardo un grat铆simo recuerdo fue de Luis Krause...
BTW, la mejor forma de dar las gracias, siempre, siempre, siempre, es acompa帽arlas con c贸digo ![]()
salu2
Cuando puse que ya lo tenia, era solo el UPLOAD y estaba muy guarreado de msginfo y paradas para ver por donde iban la cosa. Y una vez limpio ( o por lo menos yo lo considero asi), es cuando he podido aportarlo.
Si alguien lo prueba con un SFTP distinto a IONOS, que diga como le va.
Gracias y un saludo a todos.
Jos茅 garc铆a
//Para tratamiento CURL
#include "C:\harbour64_MVSC_2022\contrib\hbcurl\hbcurl.ch"hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_formadd sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_SETOPT
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_formfree sin resolver al que se hace referencia en la funci贸n PHB_CURL_free
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_version sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_VERSION
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_escape sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_ESCAPE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_escape sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_ESCAPE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_unescape sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_UNESCAPE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_unescape sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_UNESCAPE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_free sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_ESCAPE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_global_init_mem sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_GLOBAL_INIT
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_global_cleanup sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_GLOBAL_CLEANUP
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_slist_append sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_SETOPT
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_slist_free_all sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_GETINFO
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_getdate sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_GETDATE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_version_info sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_VERSION_INFO
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_strerror sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_STRERROR
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_pause sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_PAUSE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_init sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_DUPLICATE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_setopt sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_SETOPT
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_perform sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_PERFORM
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_cleanup sin resolver al que se hace referencia en la funci贸n PHB_CURL_free
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_getinfo sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_GETINFO
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_duphandle sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_DUPLICATE
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_reset sin resolver al que se hace referencia en la funci贸n PHB_CURL_free
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_recv sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_RECV
hbcurl.lib(core.obj) : error LNK2019: s铆mbolo externo __imp_curl_easy_send sin resolver al que se hace referencia en la funci贸n HB_FUN_CURL_EASY_SENDTe falta enlazar la libreria libcurl.lib
Que tama帽o tiene tu libcurl.lib ?
Verhoven wrote:Gracias Antonio.
Le he a帽adido libcurl.lib y genera el exe, pero al arrancar el programa me da el error:
La ejecuci贸n de c贸digo no puede continuar porque no se encontr贸 libcurl.dll
He tratado de encontrarla en la versi贸n de Harbour para MSVC 2022 pero no est谩. Por otro lado me gustar铆a no depender de dll externas.
No se si esto ser铆a posible.