Page 1 of 1

Envio form-data con libcurl

PostPosted: Thu Aug 26, 2021 8:32 am
by Fonsi5
Hola,

Para una integración contra otra plataforma mediante API REST necesito enviarle un documento PDF, lo tengo resuelto con una llamada externa a curl.exe, pero me gustaría dejarlo integrado mediante el uso de libcurl.

Mi problema es que para el envío del documento necesito unas funciones de libcurl que no están exportadas en ninguna de las libcurl.lib que he encontrado en el foro y por tanto cuando las intento incluir en el código me dan error de Unresolved external.

Las funciones en cuestión son estas:

curl_mime_init()
curl_mime_addpart()
curl_mime_name()
curl_mime_data()
curl_mime_filedata()

¿Como podría conseguir enlazar una libcurl.lib que tenga exportadas estas funciones?

Muchas gracias!!

Re: Envio form-data con libcurl

PostPosted: Thu Aug 26, 2021 9:27 am
by cnavarro
Creo que al final de este post, tienes un ejemplo de lo que buscas.
Con la librería que tienes seguro que funciona también
https://forum.modharbour.app/viewtopic.php?p=249#p249

Re: Envio form-data con libcurl

PostPosted: Thu Aug 26, 2021 11:06 am
by Fonsi5
cnavarro wrote:Creo que al final de este post, tienes un ejemplo de lo que buscas.
Con la librería que tienes seguro que funciona también
https://forum.modharbour.app/viewtopic.php?p=249#p249


Muchas gracias cristobal, voy a investigar si usando el HB_CURLOPT_MIMEPOST consigo hacerlo funcionar, gracias!

Re: Envio form-data con libcurl

PostPosted: Fri Aug 27, 2021 12:28 pm
by VictorCasajuana
Yo hace tiempo intenté subir imágenes por API REST y tampoco lo conseguí con la librería libcurl ya que me faltaba la función CurlFile(), al final lo implementé también mediante una llamada externa a curl.exe
Si logras hacerlo, te agradecería si puedes poner la solucion ya que así prescindiría del ejecutable curl.exe en mi aplicación.
Gracias de antemano!

Re: Envio form-data con libcurl

PostPosted: Fri Aug 27, 2021 4:47 pm
by cnavarro
Hola Victor, lo tengo en pendientes, pero se me olvida
A ver si me pongo de nuevo y confirmo que no es posible yo también.
Saludos

Re: Envio form-data con libcurl

PostPosted: Mon Aug 30, 2021 8:22 am
by Fonsi5
Hola,

Estuve peleando con libcurl pero no conseguí hacerlo funcionar, el .h no tenia definido el valor para HB_CURLOPT_MIMEPOST, buscando encontré el valor 269, pero al pasar el objeto mime no era reconocido por el REST.

Al ser un REST debería bastar con un objeto http, así que me puse a buscar la solución por ese lado, he conseguido hacerlo funcionar con Microsoft.XMLHTTP, os pongo el código que usé para las pruebas que esta funcionando por si alguno le vale de referencia para envíos de ficheros a un REST, en este caso se envían tres elementos, nombre, mail y el pdf.

Code: Select all  Expand view


   cBoundary := "-----MyBoundary"

   cPathPdf  := "c:/atinomi/test.pdf"
   cB64File  := HB_Base64Encode( memoread(cPathPdf) )

   cNombre   := "Alfonso Apellido1"
   cMail     := "alfonso.apellido1@dominio.es"

   ///creo objeto oHttp
   
   oHttp := CreateObject( 'Microsoft.XMLHTTP' )

   ohttp:Open( "POST" , cUrl , .F. )

   ohttp:SetRequestHeader("Authorization"  , "Bearer "+cToken )
   ohttp:SetRequestHeader("Content-Type", "multipart/form-data; boundary="+cBoundary)

   cCuerpo:=   '--'+cBoundary+CRLF+;
               'Content-Disposition: form-data; name="recipients[0][name]"'+CRLF+;
               ''+CRLF+;
               cNombre+CRLF+;
               '--'+cBoundary+CRLF+;
               'Content-Disposition: form-data; name="recipients[0][email]"'+CRLF+;
               ''+CRLF+;
               cMail+CRLF+;
               '--'+cBoundary+CRLF+;
               'Content-Disposition: form-data; name="files[0]"; filename="'+cPathPdf+'"'+CRLF+;
               'Content-Type: application/pdf'+CRLF+;
               ''+CRLF+;
               +cB64File+CRLF+;
               '--'+cBoundary+'--'

   lok := .t.

   try
      ohttp:Send(CCuerpo )
   catch
      lok:= .f.
   end

   If lok
     cResp := ohttp:responseText
   End
 

Re: Envio form-data con libcurl

PostPosted: Mon Aug 30, 2021 9:26 am
by cnavarro
Fonsi5 wrote:Hola,

Estuve peleando con libcurl pero no conseguí hacerlo funcionar, el .h no tenia definido el valor para HB_CURLOPT_MIMEPOST, buscando encontré el valor 269, pero al pasar el objeto mime no era reconocido por el REST.



Muy bien, gracias por tu aporte
He de decirte que el valor HB_CURLOPT_MIMEPOST es el 250, y sí aparece en el hbcurl.ch
https://github.com/vszakats/hb/blob/main/contrib/hbcurl/hbcurl.ch
Habrá que intentar seguir haciendo pruebas con curl a ver si funciona.