Задать вопрос
@kr_ilya

Почему curl и браузер возвращают разные коды ответа сервера?

Заметил, что скрипт проверки статуса ответа сервера возвращает ответ, отличный от фактического у сайта.
$url = 'https://aliexpress.ru/item/32826655041.html';
echo check_http_status($url);
function check_http_status($url){
		  $user_agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)';
		  $ch = curl_init();
		  curl_setopt($ch, CURLOPT_URL, $url);
		  curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
		  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		  $page = curl_exec($ch);

		  $err = curl_error($ch);
		  	if (!empty($err)){
			return $err;
			}
		  $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		  curl_close($ch);
		  return $httpcode;
	}

Проверка скриптом адреса https://aliexpress.ru/item/32826655041.html возвращает 302. А в браузере, по этому же адресу 404
5e72339cebd7d278980402.png
Скрипт и браузер работают на одном пк (скрипт запущен на OpenServer, на хостинге скрипт так же выдает неверный статус)
Также вопрос по теме:
Каким методом лучше определять http статус ответа?
  • Вопрос задан
  • 282 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
@mr_ko
Javascript, Node.js. React.js, Vue.js, Wordpress
Не совсем так.
5e7235cf8023a073360915.png
Если поставить в консоле браузера
Preserve log
чекбокс, то видно редирект (правда 307)
А курл с флагом
-I
тоже показывает 404
5e723684ddeeb304736823.png
Ответ написан
Комментировать
@kr_ilya Автор вопроса
Добавил
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

Заработало как надо!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
Ответ написан
Ваш ответ на вопрос

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

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