FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Conectar SFTP con CURL
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: 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
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 07: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: 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
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: 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.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 11:40 AM

Puedes poner aqui el codigo que has probado ?

gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 03:44 PM
El c贸digo es el siguiente:
Code (fw): Select all Collapse
//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 (fw): Select all Collapse
@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=
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 04: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 (fw): Select all Collapse
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."
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 05: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 05: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 (fw): Select all Collapse
#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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Conectar SFTP con CURL
Posted: Sat Jul 09, 2022 05:45 PM
Modificado verhoven.prg asi y sigue funcionando correctamente:

verhoven.prg
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   MsgInfo( unafuncioncurl() )

return nil

function unafuncioncurl( )

   curl_global_init()

return nil
regards, saludos

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

Que versi贸n de Harbour y de FWH 64 est谩s usando ?

regards, saludos

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