Envio form-data con libcurl

Envio form-data con libcurl

Postby Fonsi5 » Thu Aug 26, 2021 8: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!!
Fonsi5
 
Posts: 4
Joined: Sun Jan 20, 2019 10:08 am

Re: Envio form-data con libcurl

Postby cnavarro » Thu Aug 26, 2021 9: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
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Envio form-data con libcurl

Postby Fonsi5 » 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!
Fonsi5
 
Posts: 4
Joined: Sun Jan 20, 2019 10:08 am

Re: Envio form-data con libcurl

Postby VictorCasajuana » 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 ?
User avatar
VictorCasajuana
 
Posts: 194
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: Envio form-data con libcurl

Postby cnavarro » Fri Aug 27, 2021 4: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
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Envio form-data con libcurl

Postby Fonsi5 » Mon Aug 30, 2021 8: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: 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
 
Fonsi5
 
Posts: 4
Joined: Sun Jan 20, 2019 10:08 am

Re: Envio form-data con libcurl

Postby cnavarro » Mon Aug 30, 2021 9: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
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests