solverUrl = env('FLARESOLVERR_IP_DOCKER', 'http://192.168.178.187:8191/v1'); try { $response = Http::withHeaders([ 'Content-Type' => 'application/json', ])->timeout(120)->post($this->solverUrl, [ 'cmd' => 'request.get', 'url' => $targetUrl, 'maxTimeout' => 90000, ]); if ($response->failed()) { Log::error('FlareSolverr Verbindungsfehler. Status: ' . $response->status()); return null; } $data = $response->json(); $tmp = json_encode($data); // if (strpos($tmp, "reason") !== false && strpos($tmp, 403) !== false) // dd($data); if (isset($data['status']) && $data['status'] === 'ok') { $htmlContent = $data['solution']['response']; // JSON aus dem HTML isolieren if (preg_match('/\{.*\}/s', $htmlContent, $matches)) { $rawJson = $matches[0]; $decoded = json_decode($rawJson, true); if (json_last_error() === JSON_ERROR_NONE) { // HIER: Erfolgreiche Rückgabe des Arrays! return $decoded; } Log::error('Extrahiertes Textfragment ist kein gültiges JSON.'); } else { Log::error('Kein JSON-Muster { ... } im HTML gefunden.'); } } else { Log::error('FlareSolverr konnte die Seite nicht umgehen: ' . json_encode($data)); } } catch (\Exception $e) { Log::error('PHP Exception im CloudflareSolverService: ' . $e->getMessage()); } // Falls irgendwo ein Fehler auftrat, geben wir null zurück return null; } }