WebService - Envio Documento - Ayuda

WebService - Envio Documento - Ayuda

Postby Fonsi5 » Mon Jan 21, 2019 6:45 pm

Hola,
Llevo bastantes horas atascado con esto, estoy intentando mandar información contra un APIREST con libcurl, el problema que estoy encontrado es que necesito mandarle un fichero pdf como parte de los datos del POST.
Mediante curl con línea de comandos si soy capaz de realizar la comunicación con la siguiente llamada:

Code: Select all  Expand view

curl
-X POST
-H 'Authorization: Bearer ACCESS_TOKEN'
-F 'recipients[0][name]=Nombre'
-F 'recipients[0][email]=correo@correo.com'
-F 'files[0]=@MYPDF.pdf'
-F 'subject=Asunto'
-F 'body=Contenido body'
URL_DESTINO
 


Revisando el log del envió, veo que manda un multipart incluyendo el contenido binario del pdf.
Pero al intentar realizarlo mediante libcurl no soy capaz de que envié el fichero, mi código actual de prueba:

Code: Select all  Expand view


   curl := curl_easy_init()

   fields := "subject=Asunto&body=Cuerpo&recipients[0][name]=Nombre&recipients[0][email]=correo@correo.com&files[0]=@mipdf.pdf"
 
   aheader :={"Authorization: Bearer MI_TOKEN"}

   curl_easy_setopt( curl, HB_CURLOPT_URL, "URL_DESTINO")
   curl_easy_setopt( curl,  HB_CURLOPT_POST,1)
   curl_easy_setopt(curl,HB_CURLOPT_HTTPHEADER,aheader)
   curl_easy_setopt( curl, HB_CURLOPT_POSTFIELDS, fields )
   curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, .f. )
   curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, .f. )
   curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP )

   curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, .T. )

   ? curl_easy_perform( curl )
   ? tmp :=  curl_easy_dl_buff_get( curl )

   curl_easy_reset( curl )
   curl_global_cleanup()

 


Al enviar esto me realiza correctamente el POST, pero no se realiza la subida del fichero, me llega “@mipdf.pdf” como texto de la clave files[0].

Si en el header indico “Content-Type: multipart/form-data” la api directamente no me recoge ninguno de los campos enviados.

He intentado también indicar el content type separando por ; en el string: …&files[0]=@mipdf.pdf;type=application/pdf, pero recibo también la cadena de texto.

En principio curl debería reconocer el @ y tratar mipdf.pdf como un fichero, no como texto.

He visto en la documentación de libcurl que exite la función curl_formadd() para el envío de formularios, pero no he sido capaz de usarla, al compilar no se reconoce.

https://curl.haxx.se/libcurl/c/curl_formadd.html

También he estado realizando pruebas mediante Microsoft.XMLHTTP, con el mismo resultado, he sido capaz de enviar correctamente todos los datos con un json, pero el pdf no he sido capaz, tras leer documentación creo que por este método no es posible el envío de datos.

No se si habeis tenido que realizar alguna vez este tipo de envio y podeis echarme una mano, ya no se por donde seguir probando.

Muchas gracias!!
Fonsi5
 
Posts: 4
Joined: Sun Jan 20, 2019 10:08 am

Re: WebService - Envio Documento - Ayuda

Postby Joaquim Ferrer » Tue Jan 22, 2019 8:35 am

Viktor Vszakats en su fork de harbour dispone de un ejemplo de envio de email por curl
https://github.com/vszakats/harbour-core/blob/master/contrib/hbcurl/tests/email.prg

Fíjate en el apartado en que envia un fichero adjunto, ahí puede estar la clave de todo
Code: Select all  Expand view

curl_easy_setopt( curl, HB_CURLOPT_MIMEPOST, { ;
            { "subparts" => { ;
              { "data" => cHTML, ;
                "type" => "text/html" }, ;
              { "data" => cText } }, ;
              "type" => "multipart/alternative", ;
              "headers" => { "Content-Disposition: inline" } }, ;
            { "filedata" => __FILE__ }, ;
            { "data" => Replicate( hb_BChar( 123 ), 1024 ), ;
              "type" => "image/png", ;
              "encoder" => "base64", ;  /* binary, 8bit, 7bit, base64, quoted-printable */
              "filename" => "mock.png" } } )
 


No lo he probado pero podría ser un inicio para estudio
Saludos
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Joaquim Ferrer
 
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 66 guests