WebService - Envio Documento - Ayuda
Posted: 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:
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:
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 _ 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!!
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
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
Pero al intentar realizarlo mediante libcurl no soy capaz de que envié el fichero, mi código actual de prueba:
Code: Select all
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()
Si en el header indico “Content-Type: multipart/form-data” la api directamente no me recoge ninguno de _ 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!!