Page 1 of 2
Subuir un fichero a un servidor
Posted: Sun Nov 26, 2023 11:09 am
by miarcod
Hola Buenos días y gracias anticipadas por vuestro tiempo
El caso es que estoy intentando subir un fichero pdf a un servidor pero no lo consigo, si lo hago con postman si puedo pero desde harbour no hay manera. No tengo muchos conocimiento de uso de este tipo de comunicación por lo que estoy buscando en el foro como se hace pero no encuentro nada.
Este es el codigo que utilizo:
...
cUrl := "url..."
cFile := "X:\PDFS\FICHERO.PDF"
xDoc := CreateObject( "MSXML2.DOMDocument" )
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" , cUrl, .f.)
oHttp:SetRequestHeader("Content-Type" , "multipart/form-data" )
oHttp:SetRequestHeader("file", cFile)
try
ohttp:Send( xJSon )
catch
Msginfo("Error en el envio del fichero)
RETURN NIL
end
cRespuesta := ohttp:responseText
...
Esto es lo que envio desde postman y que funciona
Code: Select all | Expand
curl --location 'https://www.zohoapis.eu/crm/v5/Leads/594992000001640002/Attachments' \
--header 'Authorization: Zoho-oauthtoken 1e...' \
--form 'file=@"/X:/PdfS/ZOHO_PRE.PDF"'
Alguien me puede ayudar.
Gracias de nuevo
Re: Subuir un fichero a un servidor
Posted: Sun Nov 26, 2023 11:28 am
by VictorCasajuana
Dile a postman que te genere el código en PHP que es muy similar a HB y lo aplicas a HB con curl
Enviado desde mi motorola edge 20 mediante Tapatalk
Re: Subuir un fichero a un servidor
Posted: Mon Nov 27, 2023 6:19 am
by miarcod
Hola de nuevo y gracias por responder,
He estado intentando aplicar lo que hace postman a mi programa pero no lo consigo, perdón por mi ignorancia
Code: Select all | Expand
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://www.zohoapis.eu/crm/v5/Leads/59499200../Attachments',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('file'=> new CURLFILE('/X:/PdfS/ZOHO_PRE.PDF')),
CURLOPT_HTTPHEADER => array(
'Authorization: Zoho-oauthtoken 1000.',
'Cookie: 4993755637=863c018b4f; JSESSIONID=CBD8353B80A; _zcsr_tmp=5900d47b-2864-4c5097; crmcsr=5900d47b341-bf4531d05097'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La verdad es que no se parece nada al codigo que tengo escrito en harbour
Alguien podría poner un ejemplo de como enviar un fichero.
Gracias de nuevo
Re: Subuir un fichero a un servidor
Posted: Mon Nov 27, 2023 9:12 am
by VictorCasajuana
Hola.
el código sería como el siguiente:
Code: Select all | Expand
curl_easy_setopt( hcUrl, HB_CURLOPT_URL, 'https://www.zohoapis.eu/crm/v5/Leads/59499200../Attachments')
curl_easy_setopt( hcUrl, HB_CURLOPT_RETURNTRANSFER , .T.)
curl_easy_setopt( hcUrl, HB_CURLOPT_ENCODING , '')
curl_easy_setopt( hcUrl, HB_CURLOPT_MAXREDIRS , 10)
curl_easy_setopt( hcUrl, HB_CURLOPT_TIMEOUT , 0)
curl_easy_setopt( hcUrl, HB_CURLOPT_FOLLOWLOCATION , .t.)
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTP_VERSION , HB_CURL_HTTP_VERSION_1_1)
curl_easy_setopt( hcUrl, HB_CURLOPT_CUSTOMREQUEST , 'POST')
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {;
'Authorization: Zoho-oauthtoken 1000.',;
'Cookie: 4993755637=863c018b4f; JSESSIONID=CBD8353B80A; _zcsr_tmp=5900d47b-2864-4c5097; crmcsr=5900d47b341-bf4531d05097';
}
No lo he probado, solo lo he pasado a formato HB, faltaría las opciones de POSTFIELDS . Puedes verlas en el hbcurl.ch que incluye harbour.
Una vez tienes todas las opciones asignadas, ejecutas el comando con
sé que no está el código 100% montado pero espero te de la ayuda suficiente para seguir
Re: Subuir un fichero a un servidor
Posted: Tue Nov 28, 2023 5:21 am
by miarcod
Si intento usar la funcion
El programa no se ejectua
Ya he probado todo lo que se me ocurre y nada
Sigo intentando con el codigo que tenia
Code: Select all | Expand
Local xDoc, oHttp, cRespuesta, hHashRes
Local cUrl, cFile, nTam
cUrl := "https://www.zohoapis.eu/crm/v5/Leads/594992000001640002/Attachments" + space(1)
Depura(cUrl)
xDoc := CreateObject( "MSXML2.DOMDocument" )
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" , cUrl, .f.)
oHttp:SetRequestHeader("Authorization", "Zoho-oauthtoken " + cToken)
oHttp:SetRequestHeader("form-data" , "file" )
cFile := "X:\PDFS\ZOHO_PRE.PDF"
nTam := FileSize(cFile)
Depura(nTam)
oHttp:SetRequestHeader("Content-Type" , "multipart/form-data;boundary=" + NTRIM(nTam) )
cFile := "X:\PDFS\ZOHO_PRE.PDF"
cFile := "/X:/PdfS/ZOHO_PRE.Pdf"
Depura(cFile)
oHttp:SetRequestHeader("file", CfILE)
try
ohttp:Send()
catch
Msginfo("Error en el envio de datos de cliente")
RETURN NIL
end
cRespuesta := ohttp:responseText
hHashRes := hb_jsondecode(cRespuesta) //, @aHashRes)
Depura(hHashRes)
Depura("RESPUESTA>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
Depura(hHashRes)
Depura("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<FIN RESPUESTA")
La respuesta del servidor es
Code: Select all | Expand
: [code] => C=> "INVALID_DATA"
10748: [message] => C=> "the request does not contain any file"
10748: [status] => C=> "error"
Me está diciendo que el fichero no se adjunta
Gracias
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 6:28 am
by miarcod
Buenos dias
Sigo atascado con este problema y no consigo enviar el fichero.
Ya e conseguido enviar datos y que los acepte usando curl, pero lo que no consigo es enviar el fichero
Este codigo funciona
Code: Select all | Expand
hData1 := { => }
hData2 := { => }
hMensaje := { => }
hData1[ "CodigoWG" ] := Cero(RANDOM(999999), 6)
hData1[ "Last_Name" ] := "Last_Name"
hData1[ "Company" ] := "Company"
hMensaje["data"] := { hData1 }
xJson := hb_jsonEncode(hMensaje)
if ! empty( hCurl := curl_easy_init() )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, 1 )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cWeb)
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {'Authorization: Zoho-oauthtoken ' + cToken})
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, xJson )
if curl_easy_perform( hCurl ) == 0
uValue = curl_easy_dl_buff_get( hCurl )
endif
endif
hHashRes := hb_jsondecode(uValue) //, @aHashRes)
Depura(hHashRes)
Depura("RESPUESTA>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
Depura(hHashRes)
Depura("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<FIN RESPUESTA")
Pero cuando intento enviar el fichero no me funciona y no encuentro información de como indicarle a curl los datos del fichero que quiero enviar
Estoy usando este código pero no funciona, ya he probado todo lo que se me ocurre para indicarle el
cFile , además no está definido HB_CURLOPT_RETURNTRANSFER
Code: Select all | Expand
cFile := "X:/PdfS/ZOHO_PRE.Pdf"
curl_easy_setopt( hcUrl, HB_CURLOPT_URL, cWeb)
//curl_easy_setopt( hcUrl, HB_CURLOPT_RETURNTRANSFER , .T.)
curl_easy_setopt( hcUrl, HB_CURLOPT_ENCODING , '')
curl_easy_setopt( hcUrl, HB_CURLOPT_MAXREDIRS , 10)
curl_easy_setopt( hcUrl, HB_CURLOPT_TIMEOUT , 0)
curl_easy_setopt( hcUrl, HB_CURLOPT_FOLLOWLOCATION , .t.)
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTP_VERSION , HB_CURL_HTTP_VERSION_1_1)
curl_easy_setopt( hcUrl, HB_CURLOPT_CUSTOMREQUEST , 'POST')
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {'Authorization: Zoho-oauthtoken ' + cToken})
//curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, xJson )
Gracias a todos
Un saludo
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 7:25 am
by cnavarro
Te falta decirle que lo que quieres es subir un fichero: HB_CURLOPT_UPLOAD,
https://forum.modharbour.app/viewtopic. ... 89e88#p249
Eso sí, asegúrate de que el TIMEOUT sea adecuado a la velocidad de tu internet y tiempos de respuesta de tu servidor ( ahora tienes 0, por si acaso, ponle un valor suficiente y no dejes que el sistema decida )
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 8:59 am
by VictorCasajuana
miarcod wrote:Si intento usar la funcion
El programa no se ejectua
Incluyes las librerías hbcurl y hbcurls?
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 2:55 pm
by leandro
Hola como vas?
miarcod wrote:Buenos dias
Sigo atascado con este problema y no consigo enviar el fichero.
Ya e conseguido enviar datos y que los acepte usando curl, pero lo que no consigo es enviar el fichero
Este codigo funciona
Code: Select all | Expand
hData1 := { => }
hData2 := { => }
hMensaje := { => }
hData1[ "CodigoWG" ] := Cero(RANDOM(999999), 6)
hData1[ "Last_Name" ] := "Last_Name"
hData1[ "Company" ] := "Company"
hMensaje["data"] := { hData1 }
xJson := hb_jsonEncode(hMensaje)
if ! empty( hCurl := curl_easy_init() )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, 1 )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cWeb)
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {'Authorization: Zoho-oauthtoken ' + cToken})
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, xJson )
if curl_easy_perform( hCurl ) == 0
uValue = curl_easy_dl_buff_get( hCurl )
endif
endif
hHashRes := hb_jsondecode(uValue) //, @aHashRes)
Depura(hHashRes)
Depura("RESPUESTA>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
Depura(hHashRes)
Depura("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<FIN RESPUESTA")
Pero cuando intento enviar el fichero no me funciona y no encuentro información de como indicarle a curl los datos del fichero que quiero enviar
Estoy usando este código pero no funciona, ya he probado todo lo que se me ocurre para indicarle el
cFile , además no está definido HB_CURLOPT_RETURNTRANSFER
Code: Select all | Expand
cFile := "X:/PdfS/ZOHO_PRE.Pdf"
curl_easy_setopt( hcUrl, HB_CURLOPT_URL, cWeb)
//curl_easy_setopt( hcUrl, HB_CURLOPT_RETURNTRANSFER , .T.)
curl_easy_setopt( hcUrl, HB_CURLOPT_ENCODING , '')
curl_easy_setopt( hcUrl, HB_CURLOPT_MAXREDIRS , 10)
curl_easy_setopt( hcUrl, HB_CURLOPT_TIMEOUT , 0)
curl_easy_setopt( hcUrl, HB_CURLOPT_FOLLOWLOCATION , .t.)
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTP_VERSION , HB_CURL_HTTP_VERSION_1_1)
curl_easy_setopt( hcUrl, HB_CURLOPT_CUSTOMREQUEST , 'POST')
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {'Authorization: Zoho-oauthtoken ' + cToken})
//curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, xJson )
Gracias a todos
Un saludo
Correcto para enviar datos, lo puedes hacer manera fácil, pero cuando necesitas enviar un fichero, debes indicarle a curl que tipo de fichero vas enviar. En php hay una función que se encarga de "convertir" el archivo para que pueda ser enviado al servidor. Estuve buscando en el foro, pero no se en donde buscar la traducción de la función curl_file_create, de casualidad alguno de los masters sabe que se debe hacer, o en donde buscar la traducción de esa funcion?
Code: Select all | Expand
$cfile = curl_file_create('resource/test.png','image/png','testpic'); // try adding
https://www.php.net/manual/es/class.curlfile.php#115569
miarcod, por otro lado, no se si tengas el control de lado del servidor?, si lo tienes puedes subir cualquier archivo en modo dato y luego convertirlo al formato real.
De antemano gracias
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 7:54 pm
by jll-fwh
Buenas tardes:
En mi blog tienes un programa pFTP ver 1.0 32bits completo, lo he estado usando años sin problemas, solo tienes que configurar el programa y listo. Puedes crear y borrar carpetas en el servidor y todo lo necesario. Ahí tienes todo el código fuente disponible para ti y para quien lo necesite.
Un saludo
Javier LLoris
javierllorisprogramador@gmail.com
Blogs personales:
Programación:
https://javierlloris.blogspot.com/
Japonés:
https://bitacorajaponesa.blogspot.com/
Cubos de Rubik:
https://www.instagram.com/jllorisperson ... 2ybz0gmvul
Tengo una colección de unos 100 cubos de todo tipo de formas geométricas, todos resueltos, en instagram solo hay unos cuentos cubos.
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 8:10 pm
by leandro
Javier gracias por responder...
Lo que pasa es que hay que enviar los archivos a una url por "WEB", con el método POST. No por FTP
como tu eficientemente los haces un tu aplicación.
Re: Subuir un fichero a un servidor
Posted: Wed Nov 29, 2023 8:49 pm
by jll-fwh
Buenas tardes leandro:
Ok no había leido todas las respuestas, gracias leandro. Lo probaré de paso con las soluciones de los compañeros.
Javier Lloris
javierllorisprogramador@gmail.com
Blogs personales:
Programación:
https://javierlloris.blogspot.com/
Japonés:
https://bitacorajaponesa.blogspot.com/
Cubos de Rubik:
https://www.instagram.com/jllorisperson ... 2ybz0gmvul
Tengo una colección de unos 100 cubos de todo tipo de formas geométricas, todos resueltos, en instagram solo hay unos cuentos cubos.
Re: Subuir un fichero a un servidor
Posted: Thu Nov 30, 2023 5:37 am
by miarcod
Buenos dias y gracias a todos por vuestra colaboración
Ya consigo utilizar curl para la comunicación con el servidor, he tenido que copiar en la ruta del ejecutabale las dlls LIBCURL.DLL y MSVCR120.DLL
Usando la libreria ya consigo enviar datos en modo texto, pero sigo atascado en el envio del PDF
Este es el codigo que utilizo
Code: Select all | Expand
STATIC FUNCTION TestSend2(cAccess_Token)
Local cFile, cUrlAcceso, hMime, hcUrl, nRet, cRespuesta
// ========================================================================
// ENVIAR FICHERO ADJUNTO
// ========================================================================
cFile := "X:/PdfS/ZOHO_PRE.Pdf"
cUrlAcceso := "https://www.zohoapis.eu/crm/v5/Leads/594992000001640002/Attachments" //+ space(1)
GLog( PADL("ENVIAR FICHERO ADJUNTO",100, ">") )
If ! empty( hCurl := curl_easy_init() )
curl_easy_setopt( hcUrl, HB_CURLOPT_URL, cUrlAcceso)
//curl_easy_setopt( hcUrl, HB_CURLOPT_RETURNTRANSFER , .T.)
curl_easy_setopt( hcUrl, HB_CURLOPT_ENCODING , '')
curl_easy_setopt( hcUrl, HB_CURLOPT_MAXREDIRS , 10)
curl_easy_setopt( hcUrl, HB_CURLOPT_TIMEOUT , 1500)
curl_easy_setopt( hcUrl, HB_CURLOPT_FOLLOWLOCATION , .t.)
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTP_VERSION , HB_CURL_HTTP_VERSION_1_1)
curl_easy_setopt( hcUrl, HB_CURLOPT_CUSTOMREQUEST , 'POST')
curl_easy_setopt( hcUrl, HB_CURLOPT_HTTPHEADER , {'Authorization: Zoho-oauthtoken ' + cAccess_Token})
//curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, xJson )
curl_easy_setopt(hCurl, HB_CURLOPT_VERBOSE, 1)
curl_easy_setopt(hCurl, HB_CURLOPT_UPLOAD, 1)
//curl_easy_setopt(hCurl, HB_CURLOPT_UL_FILE_SETUP, cFile )
curl_easy_setopt(hCurl, HB_CURLOPT_UL_FILE_SETUP, @cFile )
nRet := curl_easy_perform( hCurl )
Depura(nRet, "nRet (233)")
If nRet == 0
cRespuesta = curl_easy_dl_buff_get( hCurl )
Else
cRespuesta := "Error " + NTRIM(nRet) + curl_easy_dl_buff_get( hCurl )
endif
EndIf
Depura(cRespuesta)
RETURN NIL
El codigo de error es 23 //#define HB_CURLE_WRITE_ERROR 23 /* */
Re: Subuir un fichero a un servidor
Posted: Thu Nov 30, 2023 6:10 am
by miarcod
Hola de nuevo
Para intentar salir del paso, estoy intentando el envío desde la linea de comandos.
He buscado y probado todo lo que encuentro pero no lo consigo tampoco.
curl --location 'https://www.zohoapis.eu/crm/v5/Leads/594992000001640002/Attachments' --header 'Authorization: Zoho-oauthtoken 1000....' --form 'file=@"/E:/postman-portable/ZOHO_PRE.PDF"'
obtengo el error
curl: (26) Failed to open/read local data from file/application
Alguien podría pasarme un ejemplo de como subir el fichero desde la línea de comandos (supongo que se podrá)
Gracias de nuevo
Re: Subuir un fichero a un servidor
Posted: Thu Nov 30, 2023 7:29 am
by VictorCasajuana
Yo hice un conector con prestashop y profundicé bastante con curl, pero la subida de los ficheros no llegué a conseguirla, al final lo hice ejecutando el curl.exe para la subida.