FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Envio form-data con libcurl
Posts: 4
Joined: Sun Jan 20, 2019 10:08 AM
Envio form-data con libcurl
Posted: Thu Aug 26, 2021 08:32 AM

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!!

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Envio form-data con libcurl
Posted: Thu Aug 26, 2021 09:27 AM
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
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: 4
Joined: Sun Jan 20, 2019 10:08 AM
Re: Envio form-data con libcurl
Posted: Thu Aug 26, 2021 11:06 AM
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!
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Envio form-data con libcurl
Posted: Fri Aug 27, 2021 12:28 PM

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!

--------

¿ Y porque no ?

¿ And why not ?
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Envio form-data con libcurl
Posted: Fri Aug 27, 2021 04:47 PM

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

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: 4
Joined: Sun Jan 20, 2019 10:08 AM
Re: Envio form-data con libcurl
Posted: Mon Aug 30, 2021 08:22 AM
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 (fw): Select all Collapse
   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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Envio form-data con libcurl
Posted: Mon Aug 30, 2021 09:26 AM
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.
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

Continue the discussion