Передавайте Basic Auth только через HTTPS, обходите страницы по контракту API и суммируйте число записей. Формат endpoint не задан, поэтому имена полей пагинации нужно согласовать, а не угадывать.
Подсчёт общего количества CVE с учётом Basic Auth и постраничного вывода
Передавайте 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.