Подсчёт общего количества CVE с учётом Basic Auth и постраничного вывода

Передавайте Basic Auth только через HTTPS, обходите страницы по контракту API и суммируйте число записей. Формат endpoint не задан, поэтому имена полей пагинации нужно согласовать, а не угадывать.

Короткий ответ

Что ответить на собеседовании

Передавайте Basic Auth только через HTTPS, обходите страницы по контракту API и суммируйте число записей. Формат endpoint не задан, поэтому имена полей пагинации нужно согласовать, а не угадывать.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо получить суммарное число всех уязвимостей CVE из защищённого API‑endpoint, корректно обрабатывая Basic Authentication и проходя через все страницы результата. Требуется реализовать запросы с учётом заголовков авторизации, извлекать количество найденных записей на каждой странице и агрегировать их в общий счётчик.

Ответ

Передавайте Basic Auth только через HTTPS, обходите страницы по контракту API и суммируйте число записей. Формат endpoint не задан, поэтому имена полей пагинации нужно согласовать, а не угадывать.

Пример для условного контракта items: list, has_next: bool и параметра page:

import requests

def count_cves(endpoint, username, password):
    if not endpoint.startswith('https://'):
        raise ValueError('HTTPS required')
    total = 0
    with requests.Session() as session:
        session.auth = (username, password)
        for page in range(1, 100_001):
            response = session.get(endpoint, params={'page': page},
                                   timeout=20, allow_redirects=False)
            response.raise_for_status()
            if response.status_code != 200:
                raise ValueError('Unexpected response')
            payload = response.json()
            if not isinstance(payload.get('items'), list):
                raise ValueError('Invalid items')
            if type(payload.get('has_next')) is not bool:
                raise ValueError('Invalid pagination')
            total += len(payload['items'])
            if not payload['has_next']:
                return total
    raise RuntimeError('Pagination limit exceeded')

Секреты получают из защищённой конфигурации, не записывая в логи. Для меняющегося набора нужна стабильная пагинация или snapshot; дубли CVE при необходимости исключают по ID.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее