FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Conectar SFTP con CURL
Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 11:11 AM

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

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 11:57 AM
Tengo este c贸digo, y no me funciona.
Todos los envios retornan 0
nResult devuelve 1
Code (fw): Select all Collapse
#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

El puerto es 22
Que puedo estar haciendo mal?
Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 12:23 PM
Aqui teines el codigo.

un ejemplo de la funcion:

SftpSubirFichero( "sftp://url_hasta_subidirectorio/nombreficher", "direccion_disco_local\nombre_fichero_que_quieras", "usuario", "contrase帽a" )

El puerto por defecto es el 22

Code (fw): Select all Collapse
#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 nResult
Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 12:37 PM

Hola,

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.

Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 12:46 PM
Aqui dejo la funcion de DOWNLOAD que me funciona y que esta si que me ha dado quebraderos de cabeza.

Gracias a todos los que me han ayudado a resolver el problema.

Gracias.
Code (fw): Select all Collapse
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 lOK
Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 12:48 PM
hmpaquito 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


Ya est谩 todo el codigo pegado. Gracias a ti tambien por tu interes hmpaquito.

Un saludo
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 12:53 PM

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

Posts: 27
Joined: Thu Feb 20, 2014 12:40 PM
Re: Conectar SFTP con CURL
Posted: Mon Mar 14, 2022 01:17 PM

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

Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 04:50 PM
Buenas tardes,
Actualmente uso curl.exe llam谩ndolo desde dentro del programa, pero me gustar铆a poder usarlo sin tener que hacer una llamada a un programa externo y tenerlo integrado.
El problema es que me falta algo en el enlazado y no se lo que es.
En el programa (prg) incluyo:
Code (fw): Select all Collapse
//Para tratamiento CURL
#include "C:\harbour64_MVSC_2022\contrib\hbcurl\hbcurl.ch"


Y en el .bat para montar el exe incluyo la librer铆a siguiente:
echo %hdirl%\hbcurl.lib >> msvc.tmp

Pero me arroja los errores que copio a continuaci贸n:
Code (fw): Select all Collapse
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_SEND


Por otro lado, alguien puede aclarar la diferencias entre las librer铆as: hbcurl.lib y hbcurls.lib que trae Harbour en la carpeta contrib.

Gracias de antemano.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 05:07 PM

Te falta enlazar la libreria libcurl.lib

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 06:20 PM
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.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 06:34 PM

Que tama帽o tiene tu libcurl.lib ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 06:41 PM
libcurl.lib
Propiedades del fichero:
Creado: 29/06/2022, 20:19:13
Modificado: 25/06/2022, 11:23:28
Tama帽o: 19.658 bytes
Tama帽o en disco: 20.480 bytes
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Thu Jul 07, 2022 06:43 PM
Es el que he descargado desde el link citado en este post para harbour_all.zip:

viewtopic.php?f=17&t=21695&p=251355&hilit=msvc+2022&sid=40fb2b0def5414933f85c063d2a53492#p251355
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Fri Jul 08, 2022 11:51 AM
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.


Tienes libcurl.dll en FWH\samples

Vamos a ver si podemos generar esta libreria de forma que no requiera ninguna DLL :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com