Если вы подключаетесь к серверу, вы можете получить от него код возврата, в противном случае произойдет сбой, и вы получите 0. Поэтому, если вы попытаетесь подключиться к «www.google.com/lksdfk», вы получите код возврата 400, если вы перейдете непосредственно на google.com, вы получите 302 (а затем 200, если вы перейдете на следующую страницу ... ну, я делаю, потому что он пересылается на google.com.br, поэтому вы можете этого не получить), и если вы перейдете в "googlecom", вы получите 0 (хост не найден), так что с последним некому отправить код обратно.
Протестировано с использованием приведенного ниже кода.
<?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);
Попробуйте это после curl_exec, чтобы узнать, в чем проблема:
print curl_error($ch);
Если он напечатал что-то вроде «искаженного», проверьте формат URL-адреса.
источник
проверьте curl_error после curl_getinfo, чтобы найти скрытые ошибки.
if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); }
источник
Как сказано здесь и ниже, неудавшийся запрос ( т.е. сервер не найден ) возвращает false, код статуса HTTP отсутствует, поскольку ответ никогда не был получен.
Звоните
curl_error()
.источник
У меня была такая же проблема, и в моем случае это было потому, что функция curl_exec отключена в php.ini. Проверить журналы:
PHP Warning: curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18
Решение - удалить curl_exec из отключенных функций в php.ini в файле конфигурации сервера.
источник
Какое именно содержимое вы передаете в $ html_brand?
Если он имеет недопустимый синтаксис URL, вы, скорее всего, получите код HTTP 0.
источник
Попробуй это:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
источник
Другая причина, по которой PHP возвращает http-код 0, - это тайм-аут. В моем случае у меня была следующая конфигурация:
curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);
Оказалось, что запрос к конечной точке, на которую я указывал, всегда занимал более 500 мс, всегда истекал по таймауту и всегда возвращал http-код 0.
Если вы удалите этот параметр (CURLOPT_TIMEOUT_MS) или установите более высокое значение (в моем случае 5000), вы получите фактический http-код, в моем случае 200 (как и ожидалось).
См. Https://www.php.net/manual/en/function.curl-setopt.php
источник
Если вы используете selinux, это может быть связано с ограничениями безопасности. Попробуйте установить это как root:
# setsebool -P httpd_can_network_connect on
источник