Page 3 of 5

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 11:11 am
by pepe_garcia
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

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 11:57 am
by cmsoft
Tengo este código, y no me funciona.
Todos los envios retornan 0
nResult devuelve 1
Code: Select all  Expand view
#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?

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 12:23 pm
by pepe_garcia
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: Select all  Expand view


#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
 

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 12:37 pm
by pepe_garcia
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.

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 12:46 pm
by pepe_garcia
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: Select all  Expand view

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

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 12:48 pm
by pepe_garcia
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

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 12:53 pm
by hmpaquito
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

Re: Conectar SFTP con CURL

PostPosted: Mon Mar 14, 2022 1:17 pm
by pepe_garcia
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

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 4:50 pm
by Verhoven
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: Select all  Expand view
//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: Select all  Expand view
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.

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 5:07 pm
by Antonio Linares
Te falta enlazar la libreria libcurl.lib

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 6:20 pm
by Verhoven
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.

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 6:34 pm
by Antonio Linares
Que tamaño tiene tu libcurl.lib ?

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 6:41 pm
by Verhoven
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

Re: Conectar SFTP con CURL

PostPosted: Thu Jul 07, 2022 6:43 pm
by Verhoven
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

Re: Conectar SFTP con CURL

PostPosted: Fri Jul 08, 2022 11:51 am
by Antonio Linares
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 :-)