Nikkorfed
@Nikkorfed
20 лет, веб-разработчик из Екатеринбурга.

Почему cURL Multi иногда теряет часть данных?

Ребят, привет! Подскажите пожалуйста — пытаюсь тут реализовать параллельное выполнение около 10 запросов, с помощью multicurl. До этого выполнял их последовательно, друг за другом, но это занимало около 30 секунд. Захотелось как-то ускорить этот процесс, поэтому переписал всё то же самое на curl_multi_*. Все работает, но ответ в виде JSON иногда приходит не полный, объект после определенной глубины просто пустой. Как это можно исправить? Кажется, не понимаю чего-то очевидного.

P. S. Одна часть данных вот такая:
5e90a682c0785474809203.png
А другая часть, вот такая:
5e90a6b6a3abf376580781.png

UPD. Вот кусок кода, может немного прояснит ситуацию:
$curls = []; $mh = curl_multi_init();
foreach ($ids as $index => $id) {
  $curls[$index] = curl_init(); $ch = $curls[$index];
  $url = 'https://shate-m.ru/SearchPart/GetPartPrices?showSubstitutes=true&useCache=false&sortAscending=true&sortField=&partId=' . $id . '&viewCurrency=RUB&selectedAdress=%D0%941';
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'alternative-parts.cookie');
  curl_multi_add_handle($mh, $ch);
}

do {
  $status = curl_multi_exec($mh, $active);
  curl_multi_select($mh);
} while ($active > 0);

$data = [];
foreach ($curls as $ch) {
  $result = json_decode(curl_multi_getcontent($ch), true);
  echo 'Результат:<br><pre>' . json_encode($result, JSON_UNESCAPED_UNICODE+JSON_PRETTY_PRINT) . '</pre>';
  array_push($data, $result);
  curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
КАКОЙ ТЫ ДИВАН?
а JSON поломан или нет?
Ответ написан
Ваш ответ на вопрос

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

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