Hi Experts,
Tengo un caso de uso en el que estoy llamando a un punto de extremo de CPI, pasando la URL de una imagen jpeg alojada (como esta:
http://braiden.net/images/img.jpg
) y luego hago una solicitud GET a esa URL usando una solicitud-respuesta para obtener los datos de imagen sin procesar en el cuerpo del mensaje.
He construido con éxito esta parte. Ahora que tengo estos datos de imagen sin procesar en el cuerpo del mensaje, me gustaría hacer una solicitud-respuesta al servicio de Reconocimiento Óptico de Caracteres de SAP (
documentado aquí
).
Esta API requiere que la solicitud esté formateada de esta manera:
•Content-Type: multipart/form-data; boundary=CPI
•APIKey: [alguna-clave-api-válida]
•Content-Length: [longitud-del-contenido]
-
Debe contener un cuerpo de formulario múltiple, con un solo campo llamado "files" que contenga los datos de la imagen
Debido a los requisitos de la solicitud para esta API, he agregado un modificador de contenido para eliminar todos los encabezados innecesarios (que pueden haber sido traídos de la primera solicitud) y agregar los encabezados requeridos. (Parece que el encabezado "Content-Length" se agrega automáticamente por CPI, y cualquier intento de cambiar/eliminar este encabezado no funciona).
Dentro de este modificador de contenido, también agregué lo siguiente en el cuerpo como una expresión:
--CPI
Content-Disposition: form-data; name="files"; filename="img.jpg"
Content-Type: image/jpeg
${body}
--CPI--
Esto envuelve los datos de imagen sin procesar con la información de límite necesaria requerida para el tipo de contenido multipart/form-data. (Este método de envolver datos sin procesar fue tomado prestado de
esta publicación de blog
.)
Aquí hay una imagen de mi flujo de integración:
Haz clic aquí
para descargar este flujo de integración como un archivo zip.
Una cosa que he notado es que al enviar la solicitud desde Postman vs. hacer la solicitud desde CPI es que el valor del encabezado Content-Length es drásticamente diferente, y como ya mencioné, parece que no hay forma de establecer manualmente este encabezado en un valor diferente.
También he notado que al ver la solicitud HTTP sin procesar hecha por CPI, los datos de imagen son ligeramente diferentes de los datos de imagen al enviarlos usando un Cliente REST. Hay algunos caracteres faltantes de vez en cuando en la solicitud que hace CPI.
Aquí hay dos ejemplos de las solicitudes, una enviada desde un Cliente REST, la otra enviada desde CPI. La solicitud del Cliente REST funciona cuando se envía al API de OCR, pero la solicitud de CPI no (devuelve un error 500).
Solicitud del Cliente REST
Solicitud de CPI
Nuevamente, las diferencias son el valor del encabezado Content-Length y algunos caracteres faltantes de la solicitud de CPI.
Aquí hay algunas preguntas:
1. ¿Es el uso de una solicitud-respuesta para obtener los datos de imagen sin procesar la forma adecuada de almacenar la imagen en el cuerpo del mensaje, o hay un método mejor?
2. ¿Cómo puedo enviar correctamente esta imagen al API de OCR? Hasta ahora solo he estado recibiendo errores 500 del servidor del API de OCR.
3. ¿Debería estar usando un codificador MIME Multipart o un script para modificar la codificación? Si es así, ¿cómo?
TL;DR: Quiero enviar una imagen a un API de reconocimiento óptico de