Вопрос по php – PHP cURL HTTP CODE возвращает 0

77

Я не понимаю, когда я повторяю $ httpCode, я всегда получаю 0, я ожидал 404, когда я изменяю $ html_brand в неработающий URL. Есть что-то, по чему я скучаю или не знаю? Благодарю.

<code> //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);
</code>

Ваш Ответ

6   ответов
2

curl_error после curl_getinfo выяснить скрытые ошибки.

if(curl_errno($ch)){   
    echo 'Curl error: ' . curl_error($ch);
}
61

print curl_error($ch);

Если он печатает что-то вроде «неправильно сформированного»; затем проверьте свой формат URL.

Спасибо за это предложение - спас мою задницу :)
ДА! Спас мою задницу.
1

Если он имеет неверный синтаксис URL, вы, скорее всего, получите HTTP-код 0.

1

Вот и ниже неудачный запрос (i.e. the server is not found) возвращает false, код состояния HTTP отсутствует, поскольку ответ не был получен.

Вызовcurl_error().

72

вы можете получить от него код возврата, в противном случае произойдет сбой, и вы получите 0. Поэтому, если вы попытаетесь подключиться к сайту www.google.com/lksdfk" вы получите код возврата 400, если вы перейдете непосредственно на google.com, вы получите 302 (а затем 200, если вы перейдете на следующую страницу ... хорошо, я делаю, потому что он перенаправляет на google.com.br, поэтому вы можете этого не получить), и если вы перейдете на страницу & quot; googlecom & quot; вы получите 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);
очень полезно ! большое спасибо вам.
Также спасибо за повторное размещение, иногда я получаю 301, который является проблемой перенаправления. Ardeus
Это странно, хотя $ response имеет html-контент, но $ httpcode всегда возвращает 0, плюс curl_error равен нулю. что могло возможно, пошло не так. Я только включаю повторный перенос, заголовок (ложь), последующее размещение только в настройках. Ardeus
2

и в моем случае это было потому, что функция 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 в файле конфигурации сервера.

Похожие вопросы