Gorky
@Gorky
Веб-разработчик

RSS — без проблем открывается в браузере, но никак не загружается через PHP. Почему?

Добрый день Тостер!
Я уже всю голову себе сломал, честно. С проблемами доступа к сайтам через PHP уже случалось сталкиваться, но всегда это решалось, а на этот раз никак. Засим обращаюсь к вам за помощью.
Вот этот адрес совершенно спокойно отрывается в браузере, отдавая RSS:
zakupki.gov.ru/epz/order/quicksearch/rss?searchStr...
Но ни через file_get_contents(), ни через cURL, с самыми разными комбинациями настроек, я его получить не могу.

Пример file_get_contents:
$context = stream_context_create(array(
	'http' => array(
		'method' => 'GET',
		'protocol_version' => '1.1',
		'header' => array(
			'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
		)
	)
));
$r = file_get_contents($url, false, $context); 
debug($r);
debug($http_response_header);

Отдает bool false и ошибку "500 Internal Server Error".

Пример параметров cURL (по разному пробовал):
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, 'http://zakupki.gov.ru/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HTTPGET, TRUE); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0');
curl_setopt($ch, CURLOPT_URL, $o['url']);

Этот думает около полминуты и вообще выдает страницу, на которой написано "Ошибка установки соединения с базой данных".

Я в смятении. Загрузить этот RSS очень нужно. Надеюсь на вашу помощь.
  • Вопрос задан
  • 743 просмотра
Решения вопроса 1
alexxxst
@alexxxst
Первый ваш пример с file_get_contents нормально отработал.
Наверное много запросов делали, в бан добавили или закешировалось на прокси?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alsopub
@alsopub
У меня сработало так:
$url = "http://zakupki.gov.ru/epz/order/quicksearch/rss?searchString=&morphology=on&pageNumber=1&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&fz44=on&fz223=on&af=on&regions=&priceFrom=0&priceTo=200000000000&currencyId=1&publishDateFrom=16.06.2016&publishDateTo=16.06.2016&updateDateFrom=&updateDateTo=&sortBy=PRICE";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko/20100101 Firefox/47.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_HEADER, 0);
$exec=curl_exec ($ch);
echo($exec);
Ответ написан
Комментировать
Immortal_pony
@Immortal_pony Куратор тега PHP
Данный код рабочий (проверил у себя). Результат: prntscr.com/bh7uvu
$context = stream_context_create(array(
  'http' => array(
    'method' => 'GET',
    'protocol_version' => '1.1',
    'header' => array(
      'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
    )
  )
));
$r = file_get_contents($url, false, $context); 
var_dump($r);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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