PHP cURL HTTP-код возвращает 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);
6 ответов:
Если вы подключаетесь к серверу, то вы можете получить код возврата от него, в противном случае он не будет работать, и вы получите 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); }
У меня была такая же проблема и в моем случае это произошло потому, что функция curl_exec отключена в PHP.Ини. Проверьте наличие журналов:
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.
Как сказал здесь и ниже, неудачный запрос (т. е. сервер не найден) возвращает false, нет кода состояния HTTP, так как ответ никогда не был получен.
вызов
curl_error().
Comments