Conectar SFTP con CURL

Re: Conectar SFTP con CURL

Postby pepe_garcia » 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
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby cmsoft » Mon Mar 14, 2022 11:57 am

Tengo este código, y no me funciona.
Todos los envios retornan 0
nResult devuelve 1
Code: Select all  Expand view  RUN
#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?
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Conectar SFTP con CURL

Postby pepe_garcia » 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: Select all  Expand view  RUN


#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
 
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby pepe_garcia » 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.
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby pepe_garcia » 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: Select all  Expand view  RUN

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
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby pepe_garcia » 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
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby hmpaquito » 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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Conectar SFTP con CURL

Postby pepe_garcia » Mon Mar 14, 2022 1: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
pepe_garcia
 
Posts: 27
Joined: Thu Feb 20, 2014 12:40 pm

Re: Conectar SFTP con CURL

Postby Verhoven » Thu Jul 07, 2022 4: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: Select all  Expand view  RUN
//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  RUN
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.
Verhoven
 
Posts: 522
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Thu Jul 07, 2022 5:07 pm

Te falta enlazar la libreria libcurl.lib
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Conectar SFTP con CURL

Postby Verhoven » Thu Jul 07, 2022 6: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.
Verhoven
 
Posts: 522
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Thu Jul 07, 2022 6:34 pm

Que tamaño tiene tu libcurl.lib ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Conectar SFTP con CURL

Postby Verhoven » Thu Jul 07, 2022 6: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
Verhoven
 
Posts: 522
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Verhoven » Thu Jul 07, 2022 6: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
Verhoven
 
Posts: 522
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 39 guests