ARCHANG3L
@ARCHANG3L
Немного программист

PHP file_get_contents даёт 404, с браузера грузится?

Вот такая проблема возникла, пытаюсь получить эту страницу
avtomarket.ru/catalog/Volvo/740/29673

Получаю так (ну и как видите перевожу в UTF8):
iconv("windows-1251", "UTF-8", file_get_contents('avtomarket.ru/catalog/Volvo/740/29673'));

Ошибка:
Warning: file_get_contents(http://avtomarket.ru/catalog/Volvo/740/29673/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found


К примеру, при попытке получить другую страницу на том же сайте:
avtomarket.ru/catalog/Volvo/XC90/37116
страница подгружается

Не знаю куда копать, подскажите.
  • Вопрос задан
  • 16203 просмотра
Решения вопроса 1
jakulov
@jakulov
Попробуйте curl
$c = curl_init('http://avtomarket.ru/catalog/Volvo/740/29673/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($c);


у меня сработало
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
AxisPod
@AxisPod
Заголовки проверяет, в случае, если не бразуер, посылает куда подальше.
Ответ написан
Комментировать
delletenebre
@delletenebre
Попробуйте с заголовком UA:

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=> "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\r\n"
  )
);

$context = stream_context_create($opts);

$file = file_get_contents('http://avtomarket.ru/catalog/Volvo/XC90/37116/', false, $context);
Ответ написан
Keksinautin
@Keksinautin
Software Engineer
А у вас хоть одну страницу (любую) так загрузить получается?
Я к тому, что адрес для file_get_contents нужно указывать вместе с http://
или вы ошибку только тут в описании допустили?

Плюс, я бы рекомендовал использовать что-то вроде этого:
$context = stream_context_create(
    [
        'http' => [
             'method' => 'GET',
             'protocol_version' => '1.1',
             'header' => [
			'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
			'Connection: close',
             ],
    ]
);
$stream = fopen('http://url', 'r', false, $context);
$content =  stream_get_contents($stream); //тут получаем страницу
$data = stream_get_meta_data($stream); //тут получаем информацию, в том числе заголовки ответа
Ответ написан
однозначно нужно копировать заголовок и имитировать браузер
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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