El informe se abre en el navegador, los parámetros se representan y el botón de exportación produce un error, una descarga vacía o un archivo que la hoja de cálculo se niega a abrir. Esa combinación tiene una forma estándar. Una página de informe que funciona ha probado la representación y la autenticación, y nada más. La exportación es una solicitud separada con su propia respuesta, y a través de un portal sin cliente también cruza una capa de reescritura que nunca se diseñó para descargas de archivos.

Dos caminos, una página que funciona

Representar y exportar son operaciones distintas aunque empiecen desde el mismo botón. El servidor de informes representa la página para un navegador y prepara la exportación mediante una extensión de salida distinta con su propio tipo de contenido y su propio comportamiento ante errores, como describe la documentación de exportación. Un portal que deja pasar perfectamente la primera todavía puede estropear la segunda, porque la segunda es una respuesta que el portal no esperaba ver. Las dos comparten una sesión y una dirección, y casi nada más.

Trate la página que funciona solo como prueba de autenticación y alcanzabilidad. Demuestra que la cuenta puede llegar al servidor de informes y que el portal reenvía HTML. No dice nada sobre respuestas de archivos, encabezados de disposición de contenido o redirecciones que terminan en una descarga en lugar de un documento.

Esa es toda la razón para comparar el camino de exportación por separado en lugar de volver a probar la página que ya funciona. Dos solicitudes que comparten una sesión siguen siendo dos solicitudes.

Tres condiciones que deciden dónde se rompe la exportación

Tres preguntas sitúan el fallo rápidamente, y cada respuesta apunta a un propietario distinto.

Primero, ¿se exporta correctamente el mismo informe, la misma cuenta y el mismo formato desde la red interna? Si es así, el servidor de informes y su representador están bien y la diferencia está en la ruta de acceso. Segundo, ¿la respuesta fallida lleva un tipo de contenido de archivo, o una página HTML con una extensión de archivo? Eso separa un error del representador de una sustitución del portal. Tercero, ¿el portal reescribe la URL de la solicitud o elimina encabezados de la respuesta? Una URL reescrita puede aterrizar en un punto final completamente distinto.

Responda las tres antes de cambiar cualquier ajuste, porque cada una tiene un remedio distinto. Un fallo del representador corresponde al servidor de informes, un cuerpo sustituido corresponde al portal, y un encabezado eliminado es una cuestión de política, no un error.

Anote las respuestas. Un caso de soporte construido con esas tres líneas vale diez capturas de pantalla.

Lea la respuesta de exportación en lugar del código de estado

Un estado HTTP correcto solo demuestra que algo respondió a la solicitud. Inspeccione el cuerpo y los encabezados juntos, porque el fallo interesante es una respuesta correcta que lleva el contenido equivocado.

curl -sS -D export.headers -o export.bin --location "https://portal.example.com/reports/export?format=xlsx"
file export.bin
head -c 300 export.bin

El volcado de encabezados muestra el tipo de contenido y cualquier disposición de contenido que haya devuelto el portal. El comando file identifica qué es realmente el cuerpo, y un archivo de texto donde se esperaba una hoja de cálculo es la clásica página de inicio de sesión sustituida. El comando head muestra lo suficiente para reconocer HTML sin volcar un informe entero en una terminal.

Elimine las cookies de sesión y los testigos antes de compartir cualquier parte. Una captura de una exportación que funciona es una prueba útil, y una captura de una sesión que pertenece a otra persona es un incidente.

Limite la excepción a la aplicación, no a la cuenta

Si el portal reescribe o bloquea la respuesta, la reparación tentadora es eximir todo el sitio o hacer anónimo el informe. Ambas cosas arreglan la descarga y eliminan la razón por la que existe el portal. Una excepción acotada nombra una ruta de aplicación, un tipo de contenido y una dirección, y sigue siendo revisable por quien posee la política.

Use la versión de la pasarela que realmente ejecuta y su configuración de aplicación documentada. Una opción que un proveedor describió una vez como dejar el tráfico sin cambios no es una instrucción general, y copiarla de un hilo de foro antiguo es cómo una excepción temporal se convierte en arquitectura permanente.

Si la excepción no se puede acotar tan estrechamente, la exportación probablemente pertenece a la ruta interna con un método de acceso distinto en lugar de detrás del portal. Una exención para todo el sitio es una decisión del propietario del portal, no un rodeo para un informe.

Acepte la exportación, no el diálogo de guardar

La última comprobación es el archivo mismo: se abre, contiene las columnas esperadas y sus totales coinciden con el informe que aprobó el usuario.

Que aparezca un diálogo de guardar no es éxito, y un archivo que se abre con una advertencia de reparación tampoco es éxito. Compare un recuento de filas y un valor conocido con el informe en pantalla, porque una exportación truncada supera cualquier prueba que solo mire el tamaño del archivo. Después exporte una segunda vez, porque una capa de caché que una vez sirve el cuerpo equivocado puede servir el correcto en el siguiente intento.

Acepte el flujo de trabajo que el usuario necesitaba, y nada menos que eso. Una descarga que se abre en la aplicación equivocada sigue siendo una exportación fallida.

Artículos relacionados