['url' => string, 'body' => string, 'headers' => array] * @return array Mapa de clave => ['response' => string|false, 'http_code' => int, 'curl_error' => string] */ public static function execute(array $requests): array { $multiHandle = curl_multi_init(); $handles = []; foreach ($requests as $key => $req) { $ch = curl_init($req['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $req['body']); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_HTTPHEADER, $req['headers']); curl_multi_add_handle($multiHandle, $ch); $handles[$key] = $ch; } $running = null; do { $status = curl_multi_exec($multiHandle, $running); if ($running) { curl_multi_select($multiHandle); } } while ($running > 0 && $status === CURLM_OK); $results = []; foreach ($handles as $key => $ch) { $results[$key] = [ 'response' => curl_multi_getcontent($ch), 'http_code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), 'curl_error' => curl_error($ch), ]; curl_multi_remove_handle($multiHandle, $ch); curl_close($ch); } curl_multi_close($multiHandle); return $results; } }