Como corrigir cURL error 28: timeout no WordPress
O que é o cURL error 28 (timeout) no WordPress?
O cURL error 28 é o código que a biblioteca cURL retorna quando uma requisição HTTP não recebe resposta dentro do tempo permitido (“Operation timed out” ou “Connection timed out”). No WordPress, ele surge quando o site usa wp_remote_get/wp_remote_post para falar com uma API externa, com o servidor de updates do WordPress.org ou consigo mesmo (loopback), e essa chamada demora demais. O número 28 é específico de timeout, diferente de outros erros cURL como o 7 (não conseguiu conectar) ou o 60 (certificado SSL inválido).
Como identificar
- A Saúde do site mostra “A requisição de teste de loopback do REST API falhou” ou “cURL error 28: Operation timed out after 10000 milliseconds”.
- Tarefas agendadas (WP-Cron) não rodam e o painel acusa “cURL error 28: Connection timed out”.
- Plugins que consultam APIs externas (frete, pagamento, IA) falham com a mensagem cURL error 28.
- A verificação de atualizações trava e o WordPress avisa que não conseguiu se conectar ao servidor de updates.
Antes de começar: Faça backup do wp-config.php e do functions.php antes de editar. Não eleve o http_request_timeout muito além do necessário: timeouts longos demais prendem processos PHP esperando respostas que podem nunca chegar, consumindo recursos do servidor.
Como prevenir
- Use um cron real do servidor (crontab chamando o wp-cron.php) em vez do WP-Cron por loopback em sites com tráfego
- Monitore as APIs externas que seus plugins consomem para detectar lentidão antes que vire timeout
- Mantenha o DNS do servidor saudável e peça ao host para confirmar que conexões de saída na 443 estão liberadas
Causa
- Requisição de loopback bloqueada (o servidor não consegue chamar a própria URL por firewall, DNS interno ou autenticação básica).
- API externa lenta ou fora do ar que não responde dentro do timeout padrão do WordPress (5s a 10s).
- Timeout do cURL/PHP curto demais para a operação (default_socket_timeout baixo).
- Firewall do servidor ou regra de segurança da hospedagem bloqueando conexões de saída (porta 443/80).
- DNS lento ou mal configurado no servidor, atrasando a resolução do domínio de destino além do limite.
Como resolver
- Identifique qual chamada está estourando o tempo: vá em Ferramentas > Saúde do site > Informações e veja se o erro cita loopback (o site chamando a si mesmo) ou um domínio externo. Isso separa problema de servidor de API de terceiro fora do ar.
- Teste o loopback manualmente: acesse pela URL do seu site /wp-cron.php no navegador. Se demorar muito ou der erro, o servidor não está conseguindo se chamar e o cron real está parado por isso.
- Aumente o timeout das requisições do WordPress: via FTP, adicione ao functions.php do tema (ou a um plugin de snippets) um filtro que eleva o tempo limite das chamadas HTTP de 5 para 30 segundos:
add_filter( 'http_request_timeout', function() { return 30; } ); - Desative WP-Cron e use um cron real do servidor: se o erro for no cron por loopback, desligue o cron interno no wp-config.php e agende o wp-cron.php no painel da hospedagem (a cada 5 minutos):
define( 'DISABLE_WP_CRON', true ); - Peça ao host para liberar conexões de saída: se o destino é externo e responde rápido fora do servidor, o firewall da hospedagem pode estar bloqueando a saída. Abra um chamado pedindo a liberação das portas 80 e 443 para conexões de saída.
PHP
// functions.php do tema (ou plugin de snippets)
// Eleva o timeout das requisicoes HTTP do WordPress de 5s para 30s
add_filter( 'http_request_timeout', function( $timeout ) {
return 30; // segundos
} );
// Aplica o mesmo teto tambem ao loopback do cron/REST
add_filter( 'http_request_args', function( $args ) {
$args['timeout'] = 30;
return $args;
} );
Perguntas frequentes
O que significa exatamente o número 28 no cURL error?
O 28 é o código de timeout do cURL: a requisição foi iniciada mas não recebeu resposta dentro do tempo limite. É diferente do erro 7 (não conseguiu nem conectar) e do 60 (certificado SSL inválido). Ver o 28 indica que a conexão até começou, mas demorou demais.
Por que o cURL error 28 aparece na requisição de loopback?
Loopback é o site chamando a própria URL para rodar cron e REST. Se o servidor não consegue se alcançar (por firewall, DNS interno ou autenticação básica ativa), a chamada estoura o tempo e gera o erro 28. Testar a URL /wp-cron.php no navegador ajuda a confirmar.
Aumentar o timeout resolve de vez o cURL error 28?
Só se a causa for uma resposta lenta que cabe em um teto maior. Se o destino estiver fora do ar ou bloqueado por firewall, subir o timeout apenas faz o site esperar mais antes de falhar. Nesses casos, a causa raiz no servidor precisa ser corrigida.
O erro afeta o WP-Cron. Meu agendamento parou?
Sim. Se o loopback falha por timeout, o WP-Cron não dispara e tarefas como publicações agendadas e backups deixam de rodar. A solução mais estável é desativar o WP-Cron e agendar o wp-cron.php por um cron real do painel da hospedagem.
Como sei se a culpa é de uma API externa e não do meu servidor?
Veja na Saúde do site qual domínio o erro cita. Se for um serviço de terceiro (gateway de pagamento, frete, IA), teste a disponibilidade dele à parte. Se a API estiver lenta ou caída, o timeout é dela; resta aumentar o limite ou aguardar a normalização.
O cURL error 28 tem relação com SSL?
Não diretamente. Problemas de SSL costumam dar cURL error 60 (certificado inválido) ou 35 (handshake). O 28 é puramente timeout. Se você vê os dois, trate-os separadamente: primeiro o SSL, depois o tempo de resposta.














