@midarovrk

Как получить конечный(финальный, последний) http статус через cURL если стоит редирект?

Как произвести проверку последнего http заголовка если стоит редирект?
То есть первый заголовок всегда выдаёт статус 200, а конечный после редиректа может быть и 404.
Но мне мой скрипт при проверке выдаст результат "Файл существует", так как он получит первый заголовок со статусом 200.

Пробовал добавить curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Но всё равно идёт проверка по первому заголовку.

// url файла для проверки на существование
$url = "http://site.com/image.jpg";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpCode == 200) {
    echo "Файл существует";
} else {
    echo "Файл не найден";
}
  • Вопрос задан
  • 811 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Надо добавить опцию CURLOPT_FOLLOWLOCATION = true, чтобы cURL выполнил все редиректы, и более ничего не менять.

curl_getinfo($ch, CURLINFO_HTTP_CODE) возвращает статус последнего ответа сервера.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
То есть первый заголовок всегда выдаёт статус 200, а конечный после редиректа

200 OK не может быть редиректом по HTTP стандартам.
Если редирект осуществляется чем-то ещё, то это не задача curl
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы