= RATE_LIMIT) { http_response_code(429); $reset_time = min($data) + WINDOW_SECONDS; $retry_after = $reset_time - $now; header("Retry-After: $retry_after"); header("X-RateLimit-Limit: " . RATE_LIMIT); header("X-RateLimit-Remaining: 0"); header("X-RateLimit-Reset: $reset_time"); echo json_encode([ 'error' => 'Too Many Requests', 'message' => "Rate limit exceeded. Try again in $retry_after seconds.", 'limit' => RATE_LIMIT, 'window' => WINDOW_SECONDS, 'retry_after' => $retry_after ]); exit(); } // Ajouter cette requête $data[] = $now; file_put_contents($storage_file, json_encode($data)); // Headers informatifs $remaining = RATE_LIMIT - count($data); header("X-RateLimit-Limit: " . RATE_LIMIT); header("X-RateLimit-Remaining: $remaining"); header("X-RateLimit-Reset: " . ($now + WINDOW_SECONDS)); return true; } // Fonction de logging function logRequest($ip, $url, $count) { $timestamp = date('Y-m-d H:i:s'); $method = $_SERVER['REQUEST_METHOD']; $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown'; $log_entry = sprintf( "[%s] IP: %s | Method: %s | URL: %s | Count: %d/%d | UA: %s\n", $timestamp, $ip, $method, $url, $count + 1, RATE_LIMIT, substr($user_agent, 0, 50) ); file_put_contents(LOG_FILE, $log_entry, FILE_APPEND); } // Vérifier le rate limit checkRateLimit(); // Si on arrive ici, la requête est autorisée $response = [ 'success' => true, 'message' => 'Request accepted', 'timestamp' => time(), 'data' => [ 'ip_detected' => getClientIP(), 'url' => $_SERVER['REQUEST_URI'], 'method' => $_SERVER['REQUEST_METHOD'], 'headers_received' => getallheaders() ] ]; echo json_encode($response, JSON_PRETTY_PRINT); ?>