Error de Curl al conectar sitios locales de Discourse y WordPress

Durante un tiempo, he estado recibiendo el siguiente error al intentar conectar mis sitios locales de Discourse y WordPress:

cURL error 61: Unrecognized content encoding type. libcurl understands deflate, gzip, br content encodings.

El problema parece ser que en un entorno de desarrollo local, Discourse está estableciendo la siguiente cabecera:

content-encoding: null

Mi servidor Apache local no puede manejar la cabecera content-encoding: null. Desde mi shell de wp, una solicitud a wp_remote_get("http://localhost:4200/site.json") falla con el error que publiqué anteriormente, mientras que una solicitud a un sitio de producción de Discourse, por ejemplo wp_remote_get("https://meta.discourse.org/site.json") funciona sin ningún problema.

Mi solución temporal para el problema es comentar esta línea en mi instalación local de Discourse: https://github.com/discourse/discourse/blob/main/app/assets/javascripts/bootstrap-json/index.js#L330. Sin embargo, no es una gran solución. ¿Alguien se ha encontrado con problemas similares al conectarse a un sitio de Discourse que se ejecuta en localhost? ¿Alguien tiene sugerencias sobre cómo configurar un servidor Apache local para aceptar respuestas que tengan la cabecera content-encoding: null?

Ojalá supiera exactamente cuándo comenzó el problema. Posiblemente ha estado ocurriendo desde que Discourse comenzó a establecer la cabecera content-encoding: null.

Editar: el problema está ocurriendo en Ubuntu 22.04.1. Versión de Curl: curl 7.81.0. Versión de PHP: 8.1.2. Esto no es nada urgente, pero tengo curiosidad por saber qué está pasando.

4 Me gusta

¡Interesante! Me suena vagamente, pero no logro ubicarlo ahora mismo. Pero supongo que mi primera pregunta es, ¿dónde y por qué Discourse está estableciendo la cabecera content-encoding en null?

Este sí parece ser un problema “solo de desarrollo”. Parece relacionado con

1 me gusta

Los números de línea cambian a medida que el código se actualiza. Como referencia futura, la línea en el código de Discourse que tengo que comentar para el desarrollo local con el plugin WP Discourse es:

res.set("content-encoding", null);

Sin haber rastreado completamente lo que sucede en el código de Discourse, parece que comentar esa línea hace que Discourse comprima la respuesta con gzip:

["content-encoding"]=>
  array(1) {
    [0]=>
    string(4) "gzip"
  }

Esto no parece causar ningún problema en mi entorno de desarrollo.

2 Me gusta

Tengo que volver a este tema cada vez que quiero conectar mis sitios locales de WordPress y Discourse.

Para mi propia referencia, la línea res.set("content-encoding", null); se encuentra ahora en:

Comentar la línea resuelve el problema.

Si el problema no está afectando a otros, posiblemente algo esté mal configurado en mi entorno de desarrollo local. Sin embargo, establecer “content-encoding” en null todavía parece incorrecto. No es un valor válido para la cabecera.

En realidad, también me encontré con esto recientemente en el contexto del plugin ActivityPub al probar la integración de ActivityPub entre el plugin ActivityPub de Wordpress y Discourse localmente.

He cambiado la categoría a Dev aquí porque creo que es solo un problema de desarrollo con discourse/discourse y solo se manifiesta con un remoto de PHP (debido a cómo funcionan las funciones de solicitud de PHP o algo así).

No lo recuerdo exactamente ahora, pero creo que llegué a la conclusión de que esto se establece en otro lugar en producción. Intentaré recordarlo mañana.

1 me gusta