PHP CURL HTTP CODE return 0
Я не понимаю, когда я эхо $httpCode, я всегда получаю 0, я ожидал 404, когда меняю $html_brand на сломанный URL. Есть ли что-то, о чем я скучаю или не знаю? Спасибо.
//check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode == 404) {
echo "The Web Page Cannot Be Found";
return;
}
curl_close($ch);
Ответы
Ответ 1
Если вы подключаетесь к серверу, вы можете получить от него код возврата, иначе он будет терпеть неудачу, и вы получите 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);
Ответ 2
Попробуйте это после curl_exec, чтобы узнать, в чем проблема:
print curl_error($ch);
Если он печатает что-то вроде "неправильного", проверьте его URL-адрес.
Ответ 3
Какое точное содержимое вы передаете в $html_brand?
Если у него есть неверный синтаксис URL, вы, скорее всего, получите код HTTP 0.
Ответ 4
Как сказано здесь и ниже, неудавшийся запрос (т.е. сервер не найден) возвращает false, а не код состояния HTTP, поскольку ответ так и не был получен.
Вызвать curl_error()
.
Ответ 5
проверьте curl_error после curl_getinfo, чтобы узнать скрытые ошибки.
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
}
Ответ 6
У меня была такая же проблема, и в моем случае это было связано с тем, что функция 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 в файле конфигурации сервера.