Page 1 of 5

Conectar SFTP con CURL

PostPosted: Tue Sep 28, 2021 12:45 pm
by cmsoft
Estimados:
Alguien ha conectado mediante CURL con un servidor SFTP para descargar / subir un archivo?
Lo hago así con FTP y funciona bien
Code: Select all  Expand view

#include "hbcurl.ch"
#include "fivewin.ch"

function Main()

  curl_global_init()
  callSFTP( "ftp.misitio.com.ar/archivos/miarchivo.jpg" )

   curl_global_cleanup()

return nil

function callSFTP( cServer )
LOCAL curlHandle, cFtpsURL := cServer, cFile, nFSize, cRet, nPort := 21 // En SFTP cambio por 22 o 122 que es el puerto que me abrieron
LOCAL curlErr
cFile := "C:\misdescargas\DOWNLOAD.JPG"

curlHandle:=curl_easy_init()
IF EMPTY(curlHandle)
  MsgStop("Error al iniciar cURL.","Error")  
  RETURN nil
ENDIF
curl_easy_reset( curlHandle )

curl_easy_setopt(curlHandle, HB_CURLOPT_URL, cftpsURL)
curl_easy_setopt(curlHandle, HB_CURLOPT_USERPWD, "usuario:password" )
curl_easy_setopt(curlHandle, HB_CURLOPT_PORT, nPort)

curl_easy_setopt(curlHandle, HB_CURLOPT_FOLLOWLOCATION, .T. )
curl_easy_setopt(curlHandle, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt(curlHandle, HB_CURLOPT_SSL_VERIFYHOST, .F. )


curl_easy_setopt(curlHandle, HB_CURLOPT_DOWNLOAD, 1)
curl_easy_setopt(curlHandle, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_FTP )  // En SFTP cambio por  HB_CURLPROTO_SFTP
curl_easy_setopt(curlHandle, HB_CURLOPT_DL_FILE_SETUP, cFile)


/* Do everything */
curlErr := curl_easy_perform(curlHandle)
 
/* Report any errors */

cRet:=curl_easy_strerror(curlErr)
MsgInfo(cRet)

//Close
curl_global_cleanup( curlHandle )
RETURN nil
 


Pero si cambio el protocolo para un servidor SFTP no me esta funcionando. Siempre me da como respuesta "Unsupported Protocol"
Alguien lo ha hecho con SFTP?

Gracias de antemano

Re: Conectar SFTP con CURL

PostPosted: Tue Feb 22, 2022 1:15 pm
by albeiroval
Hola, Cesar Gomez.

Pudiste hacer trabajar CURL con un servidor SFTP ?

Re: Conectar SFTP con CURL

PostPosted: Tue Feb 22, 2022 3:33 pm
by cmsoft
Hola!
No, no pude hacerlo conectar con SFTP.

Re: Conectar SFTP con CURL

PostPosted: Tue Feb 22, 2022 3:40 pm
by hmpaquito
Aunque no lo he usado, creo que el uso de pSftp.exe puede ser lo más rapido de implementar. Luego lo que más control aporta será usar la libreria CUrl.
En este hilo aparecen usos de ambos:
viewtopic.php?f=3&t=40326&hilit=sftp&sid=6f12b5de4a5f32b751ec7cf4502e4cab#p240837

Re: Conectar SFTP con CURL

PostPosted: Tue Feb 22, 2022 4:56 pm
by albeiroval
Hola,
Cesar, gracias, lamentable que no se pueda usar curl para SFTP.
Hmpaquito, probare usando pSftp.exe, con respecto al uso de curl de harbour tal como lo dice Cesar, Siempre me da como respuesta "Protocolo no compatible".

Re: Conectar SFTP con CURL

PostPosted: Tue Feb 22, 2022 6:21 pm
by hmpaquito
albeiroval wrote:Hola,
Cesar, gracias, lamentable que no se pueda usar curl para SFTP.
Hmpaquito, probare usando pSftp.exe, con respecto al uso de curl de harbour tal como lo dice Cesar, Siempre me da como respuesta "Protocolo no compatible".



Si se puede. En el hilo que puse, además de la solucion psftp.exe, el maestro Navarro aporta una solucion para conexion por programa. El enlace más directo es este: viewtopic.php?f=3&t=40326&hilit=sftp&start=15#p240852

Aquí un ejemplo para FTP y con un pequeño cambio, para SFTP: https://groups.google.com/g/harbour-use ... JY7zJoAQAJ

Re: Conectar SFTP con CURL

PostPosted: Wed Feb 23, 2022 3:20 am
by albeiroval
hmpaquito,

Este es el codigo que uso, y siempre sale el error "Unsoported protocol".
Uso las siguientes librerias en la compilacion con BorlandC : hbcurls.lib hbcurl.lib libcurl.lib
No se cual version de la libcurl.dll se debe usar para SSH (SFTP), yo uso la siguiente version de dll : libcurl/7.51.0 WinSSL WinIDN

Code: Select all  Expand view

curl_global_init()

    if !Empty( curl := curl_easy_init() )
       
     curl_easy_setopt( curl, HB_CURLOPT_FTPPORT, 22 )
     curl_easy_setopt( curl, HB_CURLOPT_URL, cUrlDel )
     curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP )
     curl_easy_setopt( curl, HB_CURLOPT_USERPWD, _FTPUSER + ":" + _FTPPASS )
     curl_easy_setopt( curl, HB_CURLOPT_USE_SSL, 0 )
     curl_easy_setopt( curl, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_SFTP )
     curl_easy_setopt( curl, HB_CURLOPT_POSTQUOTE, { "DELE " + cPathFile } )
     curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, .F. )
     
     if ( nResult := curl_easy_perform( curl ) ) == CURLE_OK
         ? "Delete file :", nResult
     else
         ? "Error CURL curl_easy_perform", curl_easy_strerror(nResult), nResult
     endif   

     curl_easy_reset( curl )
     
     curl_easy_cleanup( curl )
     
  endif
       
    curl_global_cleanup()
 


Si tienes un ejemplo funcional con SFTP, podrias ponerlo, por favor

Re: Conectar SFTP con CURL

PostPosted: Wed Feb 23, 2022 8:06 am
by hmpaquito
Lo siento, no lo he usado, no tengo ejemplo funcional

Re: Conectar SFTP con CURL

PostPosted: Wed Feb 23, 2022 1:14 pm
by cmsoft
Me interasa este tema, si alguien se ha conectado a un SFTP y quiere compartirlo, desde ya muy agradecido.

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 8:33 am
by pepe_garcia
Buenos días,
Estoy probando ejemplos de SFTP con CURL y me da los siguientes fallos. Se ve que me falta algo y no se que es. Si alguien me puede ayudar. Gracias

Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_CURL_GLOBAL_INIT' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
Error: Unresolved external '_HB_FUN_CURL_EASY_INIT' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
Error: Unresolved external '_HB_FUN_CURL_EASY_SETOPT' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
Error: Unresolved external '_HB_FUN_CURL_EASY_PERFORM' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
Error: Unresolved external '_HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
Error: Unresolved external '_HB_FUN_CURL_GLOBAL_CLEANUP' referenced from C:\PRO_WIN\1_PRG\2_FTP.OBJ
* Linking errors *

Jose Garcia

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 8:37 am
by hmpaquito

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 10:12 am
by pepe_garcia
Muchas gracias,

Ya lo he hecho y ahora me sale una ventana de infirmacion que me dice "protocolo no soportado". Estoy intentando acceder a un SFTP de ionos.

gRACIAS

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 10:44 am
by hmpaquito
Por favor muestra el fuente, la parte del envio, tergiversando claves y direcciones electronicas

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 10:56 am
by pepe_garcia
Aqui lo tienes. Solo estoy haciendo pruebas hasta que consiga enlacar para liarme con el resto. Gracias


#include "FiveWin.ch"
#include "hbcurl2.ch"

static oWnd, oTimer, oReader, oTdif, oFTP, oInternet, nDis

//----------------------------------------------------------------------------//

function Main()


local fm:="test" , curl, cul


If ! Empty( curl := curl_easy_init() )
hb_default( @cul, "sftp://usuario:contraseña@direccion_hasta_fichero" )
curl_easy_setopt( curl, HB_CURLOPT_URL, cul )
curl_easy_setopt( curl, HB_CURLOPT_UPLOAD)
curl_easy_setopt( curl, HB_CURLOPT_PROTOCOLS, HB_CURLPROTO_SFTP )
curl_easy_setopt( curl, HB_CURLOPT_UL_FILE_SETUP, "C:\1\TEST.TXT" ) // fichero que va a salvar y donde.
curl_easy_setopt( curl, HB_CURLOPT_INFILESIZE, len(fm) )
curl_easy_perform( curl )
curl_easy_reset( curl )
curl_easy_cleanup( curl )
Endif
curl_global_cleanup()


return nil

Re: Conectar SFTP con CURL

PostPosted: Thu Mar 10, 2022 11:02 am
by hmpaquito
Vale Pepe.

Pillate el programa WinSCP y metele tus parametros de conexion SFTP a ver si por ahi funciona