Erro cURL 28, 7 e 6 no PHP: tempo esgotado, ligação recusada e não resolve o nome

Quando o seu site chama um serviço de fora (um pagamento, uma API, uma actualização) e falha, o PHP devolve um número de erro do cURL. Os três mais vistos dizem coisas diferentes: 6, o nome do endereço não se resolveu; 7, a ligação foi recusada; 28, o tempo acabou sem resposta. Cada um tem uma causa típica e um primeiro teste. A mensagem aparece em curl_error($ch) e o número em curl_errno($ch). Em WordPress, costuma aparecer em “Saúde do site” e nas actualizações como “cURL error 28”.

Os três, lado a lado

Erro Mensagem Quer dizer Primeiro teste
6 Could not resolve host O PHP não conseguiu descobrir o IP do endereço. O endereço está escrito certo? Abra-o no navegador.
7 Failed to connect Chegou ao endereço, mas a ligação foi recusada ou não se estabeleceu. A porta e o protocolo estão certos? O serviço está de pé?
28 Operation timed out A ligação existiu ou ficou à espera, mas a resposta não chegou a tempo. O serviço demora a responder? O tempo definido é curto de mais?

Erro 6: não resolve o nome

1 Confira a grafia do endereço no código ou na configuração: uma letra a mais, um espaço, um https:// duplicado.
2 O domínio de destino está activo? Se acabou de o registar ou de mudar o DNS, pode ainda não estar visível. Veja quanto tempo demora a propagação do DNS.
3 É um serviço seu, com outro nome? Se o site chama o próprio domínio por um endereço que só funciona na sua máquina (um ficheiro hosts, por exemplo), o servidor não o conhece.

Erro 7: ligação recusada

1 Confira a porta. Um serviço que ouve na 8080 não responde na 443. Veja que portas estão abertas.
2 O serviço de destino pode estar a recusar o IP do seu servidor. Muitos serviços só aceitam pedidos de endereços autorizados. Veja qual é o IP do seu serviço de hospedagem. O IP de saída pode não ser o do site: para ter a certeza, peça-nos.
3 O serviço está em baixo? Consulte a página de estado do fornecedor, ou tente a partir do seu computador.

Erro 28: o tempo esgotou

1 Teste a partir do Terminal (se a sua conta o tem) com curl -sI https://servico.tld/. Se aí também demora, o problema é do serviço ou da ligação até ele.
2 Aumente o tempo, mas com cabeça. Duas opções em PHP: CURLOPT_CONNECTTIMEOUT (o tempo para ligar) e CURLOPT_TIMEOUT (o tempo total). Valores muito curtos dão falsos erros; valores infinitos prendem o seu PHP à espera.
3 Não chame o serviço em cada visita. Guarde a resposta durante um tempo (uma cache simples, um “transient” do WordPress) e deixe a chamada para uma tarefa agendada. Veja correr um script PHP a partir de um cron.
4 Cuide da falha. O código deve prever que o serviço não responda e mostrar uma mensagem decente, em vez de pendurar a página.
Um tempo esgotado em vez de “recusada” sugere que algo descarta o pedido sem avisar, tipicamente uma regra de firewall no destino. Recusada rápido, quase sempre porta errada ou serviço parado. Esgotado, quase sempre bloqueio ou lentidão. É uma pista, não uma certeza.
Há erros que não são do seu servidor. O código é seu, o serviço é de outra pessoa. O nosso suporte olha para o lado do servidor, mas não repara integrações de terceiros: o limite está em até onde vai o nosso suporte.

Quer saber se o seu servidor consegue chegar a um endereço de fora? Envie-nos o endereço, a porta e a mensagem completa do erro.

Abrir um pedido de suporte

VEJA TAMBÉM

Que portas estão abertas, e porque a integração fica pendurada

Erro cURL 60: problema com o certificado SSL

Onde está o registo de erros do PHP

Qual é o IP do seu serviço de hospedagem e onde o ver

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?