Se você se conectar ao servidor, poderá obter um código de retorno dele, caso contrário, ele falhará e você obterá um 0. Portanto, se tentar se conectar a "www.google.com/lksdfk", obterá um código de retorno de 400, se você for diretamente para google.com, obterá 302 (e, em seguida, 200 se encaminhar para a próxima página ... bem, eu faço porque ele encaminha para google.com.br, então você pode não conseguir isso), e se você for para "googlecom" obterá um 0 (host não encontrado), então com o último, não há ninguém para enviar o código de volta.
Testado usando o código abaixo.
<?php
$html_brand = "www.google.com";
$ch = curl_init();
$options = array(
CURLOPT_URL => $html_brand,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ( $httpCode != 200 ){
echo "Return code is {$httpCode} \n"
.curl_error($ch);
} else {
echo "<pre>".htmlspecialchars($response)."</pre>";
}
curl_close($ch);
Tente fazer isso depois de curl_exec para ver qual é o problema:
Se for impresso algo como 'malformado', verifique o formato do seu URL.
fonte
verifique o curl_error após o curl_getinfo para descobrir os erros ocultos.
fonte
Como disse aqui e abaixo, uma solicitação com falha ( ou seja, o servidor não foi encontrado ) retorna falso, nenhum código de status HTTP, uma vez que uma resposta nunca foi recebida.
Ligue
curl_error()
.fonte
Eu tive o mesmo problema e no meu caso foi porque a função curl_exec está desabilitada no php.ini. Verifique se há registros:
A solução é remover curl_exec das funções desabilitadas em php.ini no arquivo de configuração do servidor.
fonte
Qual é o conteúdo exato que você está passando para $ html_brand?
Se tiver uma sintaxe de URL inválida, você provavelmente obterá o código HTTP 0.
fonte
Experimente isto:
fonte
Outro motivo para o PHP retornar o código http 0 é o tempo limite. No meu caso, tinha a seguinte configuração:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Acontece que a solicitação para o endpoint para o qual eu estava apontando sempre demorava mais de 500 ms, sempre expirando e sempre retornando o código http 0.
Se você remover esta configuração (CURLOPT_TIMEOUT_MS) ou colocar um valor mais alto (no meu caso 5000), você obterá o código http real, no meu caso 200 (como esperado).
Veja https://www.php.net/manual/en/function.curl-setopt.php
fonte