Conectar SFTP con CURL

Re: Conectar SFTP con CURL

Postby Antonio Linares » Fri Jul 08, 2022 11:54 am

Que compilador de C usas para construir tu aplicación con FWH ?
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 7:31 am

Utilizo el MSVC 2022.

Y para Harbour la que incluyes en el fichero harbour_all.zip, descargado desde el link citado en el post:

viewtopic.php?f=17&t=21695&p=251355&hilit=msvc+2022&sid=40fb2b0def5414933f85c063d2a53492#p251355
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 10:19 am

He buscado una libreria curl autocontenida y parece que existe pero solo para MinGW

Por otra parte resulta que Windows tiene su propio curl:
https://curl.se/windows/microsoft.html

asi que he buscado en el ordenador con la esperanza de encontrar una libreria autocontenida del propio Microsoft, pero sin éxito

No se si se será sencillo ó no construir una lib autocontenida de curl. Mientras tanto podrias usar la DLL, tampoco es tan grave :-)
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 10:38 am

Gracias Antonio, pero he probado con la dll y da un problema de memoria al arrancar el programa una vez compilado.
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 11:40 am

Puedes poner aqui el codigo que has probado ?

gracias
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 3:44 pm

El código es el siguiente:
Code: Select all  Expand view
//Para tratamiento CURL
#include "C:\harbour64_MVSC_2022\contrib\hbcurl\hbcurl.ch"

...
function main()
...
MENUITEM '&CURL_FTP' ACTION ftpSubirFichero( "ftp://direccion.mooo.org/fichdescargado.txt",;
                                                "C:\carpeta2\prueba.txt", "usuario", "password" )
...
function ftpSubirFichero( 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_FTP) //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


Y en el .bat para generar el exe:
Code: Select all  Expand view
@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ?FWH 64 for Harbour 21.04 (VS64bits)  Apr. 2021  Harbour development power  ³Ü
ECHO ?(c) FiveTech 1993-2021 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ³Û
ECHO ?                   Modificación Verhoven 25/06/2021                        ³Û
ECHO ?             MS Visual Studio Community 2022 para 64 Bits (29/06/2022)     ³Û
ECHO ?                                                                           ³Û
ECHO ?   Carpetas de la instalación para que funcione este bat:                  ³Û
ECHO ?           FWH 64:      C:\FWH64                                           ³Û
ECHO ?           Harbour 64:  C:\harbour64_MVSC_2022                             ³Û
ECHO ?           VSC 2022:    En la que instala por defecto                      ³Û
ECHO ?                                                                           ³Û
ECHO ?           MULTIHILOS                                                      ³Û
ECHO ?                                                                           ³Û
ECHO ?   Para generar el exe:                                                    ³Û
ECHO ?                   build64 MIPROG.PRG genera MIPROG_64.EXE                 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß



if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST

@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
@set current_dir=%cd%

@set path=%path%;C:\harbour64_MVSC_2022\lib\win\msvc64;C:\harbour64_MVSC_2022\include

if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
if "%FWDIR%" == "" set FWDIR=C:\fwh64
if "%HBDIR%" == "" set HBDIR=C:\harbour64_MVSC_2022

ECHO ***** Compiling with Harbour 64 bytes...

set hdir=%HBDIR%
set hdirl=%HBDIR%\lib\win\msvc64
@cd %current_dir%

%hdir%\bin\win\msvc64\harbour %1 /n /i%FWDIR%\include;%hdir%\include /p /d__64__ %2 %3 > comp.log 2> warnings.log

IF ERRORLEVEL 1 GOTO COMPILEERROR
@type comp.log
@type warnings.log

ECHO .
ECHO ***** Compiling with MSVC 2022 64 bytes...
cl -D__64__ -TP -W3 -O2 -c -I%hdir%\include -I"%ProgramFiles(x86)%\Windows Kits"\10\Include\10.0.22621.0\ucrt %1.c
:ENDCOMPILE

ECHO .
ECHO ***** Compiling Resources with MSVC 2022 64 bytes...
IF EXIST %1.rc "%ProgramFiles(x86)%\\Windows Kits\10\bin\10.0.22621.0\x64\rc" -r -D__64__ %1

echo %1.obj  > msvc.tmp

rem echo %fwdir%\lib\FiveH64.lib %fwdir%\lib\FiveHC64.lib %fwdir%\lib\libmariadb64.lib >> msvc.tmp

echo %fwdir%\lib\FiveH64.lib %fwdir%\lib\FiveHC64.lib >> msvc.tmp

echo %fwdir%\lib\hbhpdf64.lib >> msvc.tmp
echo %fwdir%\lib\libhpdf64.lib >> msvc.tmp

echo %hdirl%\hbrtl.lib  >> msvc.tmp
rem echo %hdirl%\hbvm.lib  >> msvc.tmp  NO MULTIHILOS
echo %hdirl%\hbvmmt.lib  >> msvc.tmp
echo %hdirl%\gtgui.lib  >> msvc.tmp
echo %hdirl%\hblang.lib  >> msvc.tmp
echo %hdirl%\hbmacro.lib  >> msvc.tmp
echo %hdirl%\hbrdd.lib  >> msvc.tmp
echo %hdirl%\rddntx.lib  >> msvc.tmp
echo %hdirl%\rddcdx.lib  >> msvc.tmp
echo %hdirl%\rddfpt.lib  >> msvc.tmp
echo %hdirl%\hbsix.lib  >> msvc.tmp
echo %hdirl%\hbdebug.lib  >> msvc.tmp
echo %hdirl%\hbcommon.lib  >> msvc.tmp
echo %hdirl%\hbpp.lib  >> msvc.tmp
echo %hdirl%\hbcpage.lib  >> msvc.tmp
echo %hdirl%\hbwin.lib  >> msvc.tmp
echo %hdirl%\hbct.lib  >> msvc.tmp
echo %hdirl%\hbziparc.lib >> msvc.tmp
echo %hdirl%\hbmzip.lib >> msvc.tmp
echo %hdirl%\hbzlib.lib >> msvc.tmp
echo %hdirl%\hbpcre.lib >> msvc.tmp
echo %hdirl%\minizip.lib >> msvc.tmp
echo %hdirl%\xhb.lib >> msvc.tmp
echo %hdirl%\hbcplr.lib >> msvc.tmp
echo %hdirl%\png.lib >> msvc.tmp
echo %hdirl%\hbtip.lib >> msvc.tmp
echo %hdirl%\hbzebra.lib >> msvc.tmp
echo %hdirl%\libcurl.lib >> msvc.tmp
echo %hdirl%\hbcurl.lib >> msvc.tmp

echo %hdirl%\hbcomm.lib >> msvc.tmp
echo %hdirl%\hbmxml.lib >> msvc.tmp
echo %hdirl%\mxml.lib >> msvc.tmp

rem Uncomment these two lines to use Advantage RDD
rem echo %hdirl%\rddads.lib >> msvc.tmp
rem echo %hdirl%\ace32.lib >> msvc.tmp

echo kernel32.lib  >> msvc.tmp
echo user32.lib    >> msvc.tmp
echo gdi32.lib     >> msvc.tmp
echo winspool.lib  >> msvc.tmp
echo comctl32.lib  >> msvc.tmp
echo comdlg32.lib  >> msvc.tmp
echo advapi32.lib  >> msvc.tmp
echo shell32.lib   >> msvc.tmp
echo ole32.lib     >> msvc.tmp
echo oleaut32.lib  >> msvc.tmp
echo uuid.lib      >> msvc.tmp
echo odbc32.lib    >> msvc.tmp
echo odbccp32.lib  >> msvc.tmp
echo iphlpapi.lib  >> msvc.tmp
echo mpr.lib       >> msvc.tmp
echo version.lib   >> msvc.tmp
echo wsock32.lib   >> msvc.tmp
echo msimg32.lib   >> msvc.tmp
echo oledlg.lib    >> msvc.tmp
echo psapi.lib     >> msvc.tmp
echo gdiplus.lib   >> msvc.tmp
echo winmm.lib     >> msvc.tmp
echo vfw32.lib     >> msvc.tmp
echo ws2_32.lib    >> msvc.tmp
echo wininet.lib  >> msvc.tmp
echo urlmon.lib  >> msvc.tmp
echo strmiids.lib  >> msvc.tmp

IF EXIST %1.res echo %1.res >> msvc.tmp

ECHO .
ECHO *****  Linking with MSVC 2022...
link @msvc.tmp /nologo /subsystem:windows /force:multiple /OUT:%1_64.exe
IF ERRORLEVEL 1 GOTO LINKERROR

ECHO * Application successfully built *
%1_64.exe
GOTO EXIT
ECHO

:COMPILEERROR
ECHO .
ECHO ********************
ECHO * Compiling errors *
@type comp.log
@type warnings.log
ECHO *                  *
ECHO ********************
GOTO EXIT

:LINKERROR
ECHO .
ECHO ********************
ECHO *  Linking errors  *
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Build [Program]     {-- No especifiques la extensión PRG
ECHO                                {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT
rem delete temporary files
@del %1.c
@del %1.obj
@del %1.ppo
@del %1.res
@del msvc.tmp
@del comp.log
@del warnings.log

rem Restaura las variables de ENTORNO
@set path=%oldpath%
@set include=%oldinclude%
@set lib=%oldlib%
@set libpath=%oldlibpath%
@set oldpath=""
@set oldinclude=""
@set oldlib=
@set oldlibpath=
Last edited by Verhoven on Sat Jul 09, 2022 4:21 pm, edited 1 time in total.
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 4:15 pm

De hecho Antonio, el error sale nada más arrancar, incluso sin necesidad de llamar a las funciones que correponden a CURL. Me explico:

Si simplimente compilo el programa sin incluir ninguna función de CURL pero incluyendo las librerías libcurl.lib y hbcurl.lib, además de en el prg el fichero de cabecera C:\harbour\contrib\hbcurl\hbcurl.ch, el exe se genera bien y funciona.

Pero si además de lo anterior incluyo cualquier función de CURL, aunque la función que la contiene no sea llamada en ningún momento, como por ejemplo:
Code: Select all  Expand view
function unafuncioncurl( )
   curl_global_init()
return NIL


se genera el exe, pero al arrancarlo se para sin dar opción a hacer nada y Windows arroja una ventana con el error:
"Error de la aplicación
La aplicación no se pudo iniciar correctamente (0xc000007b),
Haga clic Aceptar para cerrarla."
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby cnavarro » Sat Jul 09, 2022 5:29 pm

Asegurate de tener las DLLs necesarias en la carpeta donde se ejecuta tu EXE
libcurl.dll
libeay32.dll
libssh2.dll
ssleay32.dll
zlib1.dll
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 5:42 pm

Estimado Paz,

He modificado FWH\samples\buildh64.bat para añadir estas dos líneas:

echo %hdirl%\hbcurl.lib >> msvc.tmp
echo %hdirl%\libcurl.lib >> msvc.tmp

y he probado el siguiente ejemplo, verhoven.prg
Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   MsgInfo( "ok" )

return nil

function unafuncioncurl( )

   curl_global_init()

return NIL


Y Windows ha reportado que no encontraba libcurl-x64.dll. Lo he copiado a la carpeta samples, y el ejemplo ha funcionado correctamente :-)

Por favor, descarga libcurl-x64.dll desde aqui:
https://github.com/FiveTechSoft/Harbour_builder/blob/master/win64_extra/libcurl-x64.dll

haz los cambios que te he indicado en samples\buildh64.bat y usalo para construir verhoven.prg y comprueba si obtienes el mismo resultado que el que te he comentado

gracias
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 5:45 pm

Modificado verhoven.prg asi y sigue funcionando correctamente:

verhoven.prg
Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   MsgInfo( unafuncioncurl() )

return nil

function unafuncioncurl( )

   curl_global_init()

return nil
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 6:20 pm

Buenas tardes Cristobal y Antonio.
Siguiendo vuestras instrucciones he conseguido localizar en mi equipo las siguientes dll:
libcurl.dll
libeay32.dll
ssleay32.dll


Pero no localizo ni en mi carpeta harbour ni en la de FW las restantes, esto es:
libssh2.dll
zlib1.dll


He descargado la que ha indicado Antonio, libcurl-x64.dll y he colocado en la carpeta del exe y en la carpeta donde se corre el exe las dll que he conseguido.

Pero sigue con el mismo fallo.
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 6:39 pm

Por favor enviame tu EXE usando https://wormhole.app/

y lo pruebo aqui

Aqui tienes el PRG, la DLL y el EXE. Descárgalos en una carpeta en donde no haya nada mas y verás como funciona correctamente:
https://wormhole.app/NZx2m#Ar-WIPIojrEh37-dmjHRug
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Verhoven » Sat Jul 09, 2022 7:01 pm

Antonio, te paso el link con mi exe y mi prg:
https://wormhole.app/QKbzx#fpifjZv1tVs_RFW_54_jPw

He probado el que tu me has proporcionado y obtengo el siguiente error (tengo W10):
No se encuentra el punto de entrada del procedimiento
SSL_CTX_set_post_handsake_auth en la biblioteca de
vínculos dinámicos C:\KK\libcurl-x64.dll
Verhoven
 
Posts: 521
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 7:09 pm

Que versión de Harbour y de FWH 64 estás usando ?
regards, saludos

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

Re: Conectar SFTP con CURL

Postby Antonio Linares » Sat Jul 09, 2022 7:14 pm

Revisando las DLLs que necesita libcurl-x64.dll necesitas tener estas:

libcrypto-1_1-x64.dll
libssl-1_1-x64.dll

Asi que aqui las tienes y descargalas en donde has descargado los ficheros que te he enviado:
https://github.com/FiveTechSoft/Harbour_builder/blob/master/win64_extra/libcrypto-1_1-x64.dll
https://github.com/FiveTechSoft/Harbour_builder/blob/master/win64_extra/libssl-1_1-x64.dll

Con eso el EXE debería funcionar correctamente
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
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 99 guests