@xenonhammer

Как последовательно получать данные с разных url и спользуя curl?

Списка урлов нет, они выдаются в зависимости от того на какой странице данных в данный момент находишься (пагинация). Формируется задача
Нужно подключиться ->
выполнить код и получить новый url ->
Соединиться с новым url->
Выполнить код и получить следующий url ->
....
Как это пытаюсь сделать я:

<?php
/* Первое подключение. Использую опцию которая принудительно закроет соединение, 
я думаю, что это даст мне возможность использовать код подключения повторно подставив новый url. */
$curl = curl_init('https://api.site.ru/v1/assortment/?api_key=cbc874c6031c9bc71d36aac0b6000');
$arHeaderList = array();
	$arHeaderList[] = 'Accept: application/json';
	$arHeaderList[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78';

		curl_setopt_array(
			CURLOPT_URL => $curl;
			CURLOPT_HTTPHEADER => $arHeaderList;
			CURLOPT_FOLLOWLOCATION => true;
			CURLOPT_RETURNTRANSFER => true;
			CURLOPT_FORBID_REUSE => true;  //для принудительного 
                        )                                                         //закрытия соединения после завершения его обработки
$result = curl_exec($c);
curl_close($c);
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//Далее исполняется функция и происходит получение нового url
/*
функция data();
*/
data();
	$url=($data["meta"]["pagination"]["next"]);  //Новый url
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//Далее я в коде подключения выставляю новый url и в опциях выставляю принудительного использования нового соединения вместо закешированного. 
$arHeaderList = array();
			$arHeaderList[] = 'Accept: application/json';
			$arHeaderList[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78';
		
		$url = ($data["meta"]["pagination"]["next"]);
		$url_p = curl_init($url);

		curl_setopt_array(
			CURLOPT_URL => $url_p;
			CURLOPT_HTTPHEADER => $arHeaderList;
			CURLOPT_FOLLOWLOCATION => true;
			CURLOPT_RETURNTRANSFER => true;
			CURLOPT_FRESH_CONNECT => true; // Опция принудительного использования нового соединения вместо закешированного. 
			)
		$result1 = curl_exec($curl);
		curl_close($curl);
		
			if($result1){
				echo "Подключение состоялось";
			}
			else {
				echo "НЕ состоялось, но обработано";
			}
?>



Код работает ровно до тех пор пока я не вставлю код нового подключения, далее пустой экран.

У Вас есть мысли как решить мою проблему? может быть я использую неправильный подход?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Должно быть так (смотрите на аргументы curl_exec() и curl_close()):
$url_p = curl_init($url);
curl_setopt_array($url_p, array(
      CURLOPT_HTTPHEADER => $arHeaderList,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_RETURNTRANSFER => true,
      ));
$result1 = curl_exec($url_p);
curl_close($url_p);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Надо так:
curl_setopt_array($curl, [
      CURLOPT_HTTPHEADER => $arHeaderList;
      CURLOPT_FOLLOWLOCATION => true;
      CURLOPT_RETURNTRANSFER => true;
      CURLOPT_FORBID_REUSE => true;  //для принудительного 
                        ]);

Лучше выучите для начала синтаксис языка
Ответ написан
Ваш ответ на вопрос

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

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