Страницы

Поиск по вопросам

среда, 13 марта 2019 г.

Ошибка 404 в ответе cURL

Здравствуйте! У меня такой вопрос. Я отправляю post данные с помощью cURL на другой сайт. Мне нужно проверить если в курле введен не существующий url сайта, то в итоге возвращается стр. 404. Как сделать проверку что возвращена именно страница 404? Поиском подстроки 404 в принятом html или есть какой-то другой способ?


Ответ

Это очень индивидуально для каждого сайта.
"Правильная" 404 страница отдаёт http_code 404, но к сожалению не все сайты правильные. Многие отдают 200 ОК на 404 ошибку.
Кроме того, каждый сайт может сделать свою кастомную 404 страничку с уникальным дизайном. Там может вообще не встретиться 404 (легко: сделано картиной)
Поэтому нужно смотреть на конкретный сайт и анализировать конкретно его особенности. Кроме того, принятый алгоритм может вдруг перестать работать после редизайна сайта.
Искать в теле только 404 чревато изредка ложными срабатываниями -- особенно если на сайте много разных цифр и таблиц -- может найтись и такая, на которой 404 встречается.
Увы, серебряной пули нет. Подбирайте под конкретный сайт свой собственный алгоритм.
PS Классический ответ 404 в http_code реализуется так:
$handle = curl_init($url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */ $response = curl_exec($handle);
/* Check for 404 (file not found). */ $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); if($httpCode == 404) { /* Handle 404 here. */ }
curl_close($handle);
Пример отсюда: https://stackoverflow.com/questions/408405/easy-way-to-test-a-url-for-404-in-php Также см. в документации: http://php.net/manual/ru/function.curl-getinfo.php

Комментариев нет:

Отправить комментарий