Cómo resolver HTML codificado con gzip en paquetes http
Como todos sabemos, en el modo predeterminado, el código HTML de la página web enviada a través del protocolo http se transmite después de la codificación gzip. Entonces, ¿cómo respondemos a estos HTML codificados?
Quizás sepas que existe un comando gzip en Linux. Puede comprimir archivos en formato de codificación gzip, es decir, *.gz
Y para la compresión y descompresión de archivos, puede utilizar varias interfaces proporcionadas en la biblioteca zlib para operar. Pero aquí viene el problema. Las funciones utilizadas para la codificación gzip se denominan gz. Estas interfaces mantienen una estructura llamada gz_stream. Opera sobre archivos ARCHIVO*.
El problema que queremos resolver es que colocamos el contenido codificado en gzip del paquete interceptado en un búfer. Entonces, ¿cómo aplicamos estas interfaces a los datos en este búfer?
Mi pensamiento inicial fue: ¿podría encontrar una de estas interfaces específicamente para decodificar datos en la memoria?
Con esto en mente, miré el código fuente de esta biblioteca. Luego se rindió. En cuanto al motivo para rendirme, puede ser que no tenga suficiente perseverancia o que ya no quiera mirar el código fuente. Considerándolo todo, me dolía la cabeza después de verlo todo el día.
Más tarde, pensé en una forma de evitar esta idea y tomé un desvío. De pronto el problema se hizo evidente.
La idea es la siguiente:
1. Guardar los datos codificados obtenidos en un archivo. Tenga en cuenta que el archivo debe escribirse en formato binario. De lo contrario no se podrá decodificar.
2. Utilice las interfaces gzopen(), gzread() y gzclose() en zlib para completar la tarea de decodificación.