Erro do Curl ao conectar sites locais do Discourse e WordPress

Por algum tempo, tenho recebido o seguinte erro ao tentar conectar meus sites locais do Discourse e WordPress:

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

O problema parece ser que, em um ambiente de desenvolvimento local, o Discourse está definindo o seguinte cabeçalho:

content-encoding: null

Meu servidor Apache local não consegue lidar com o cabeçalho content-encoding: null. Do meu shell do wp, uma solicitação para wp_remote_get("http://localhost:4200/site.json") falha com o erro que postei acima, enquanto uma solicitação para um site de produção do Discourse, por exemplo, wp_remote_get("https://meta.discourse.org/site.json") funciona sem problemas.

Minha solução temporária para o problema é comentar esta linha na minha instalação local do Discourse: https://github.com/discourse/discourse/blob/main/app/assets/javascripts/bootstrap-json/index.js#L330. No entanto, essa não é uma ótima solução. Alguém já passou por problemas semelhantes ao se conectar a um site Discourse rodando em localhost? Alguém tem sugestões sobre como configurar um servidor Apache local para aceitar respostas que tenham o cabeçalho content-encoding: null?

Gostaria de saber exatamente quando o problema começou. Possivelmente, ele tem ocorrido desde que o Discourse começou a definir o cabeçalho content-encoding: null.

Editar: o problema está ocorrendo no Ubuntu 22.04.1. Versão do Curl: curl 7.81.0. Versão do PHP: 8.1.2. Isso não é nada urgente, mas estou curioso sobre o que está acontecendo.

4 curtidas

Interessante! Isso me soa vagamente familiar, mas não consigo identificar o motivo no momento. Mas acho que minha primeira pergunta é: onde e por que o Discourse está definindo o cabeçalho content-encoding como null?

Isso realmente parece ser um problema “apenas de desenvolvimento”. Parece relacionado a

1 curtida

Os números das linhas mudam à medida que o código é atualizado. Para referência futura, a linha no código do Discourse que tenho que comentar para desenvolvimento local com o plugin WP Discourse é:

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

Sem ter rastreado completamente o que está acontecendo no código do Discourse, parece que comentar essa linha está fazendo com que o Discourse gzip a resposta:

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

Isso não parece causar problemas em meu ambiente de desenvolvimento.

2 curtidas

Tenho que voltar a este tópico toda vez que quero conectar meus sites locais do WordPress e Discourse.

Para minha própria referência, a linha res.set("content-encoding", null); agora está em:

Comentar a linha resolve o problema.

Se o problema não estiver afetando outras pessoas, possivelmente algo está mal configurado no meu ambiente de desenvolvimento local. No entanto, definir “content-encoding” para null ainda parece errado. Não é um valor válido para o cabeçalho.

Na verdade, também encontrei isso recentemente no contexto do plugin ActivityPub ao testar a integração do ActivityPub entre o plugin ActivityPub do WordPress e o Discourse localmente.

Mudei a categoria para Dev aqui porque acho que é apenas um problema de desenvolvimento com discourse/discourse e só se manifesta com um remoto PHP (por causa de como as funções de solicitação PHP lidam com as coisas ou algo assim).

Não me lembro exatamente agora, mas acho que cheguei à conclusão de que isso é definido em outro lugar na produção? Tentarei me lembrar amanhã.

1 curtida