diff --git a/config.yaml b/config.yaml index 5e29fb8..0153ed0 100644 --- a/config.yaml +++ b/config.yaml @@ -49,8 +49,8 @@ pt_sandbox: # Отключать проверку SSL-сертификата (для самоподписанных сертификатов) verify_ssl: true - # Endpoint для загрузки файла на анализ - upload_endpoint: "/api/v1/files/upload" + # Endpoint для загрузки и запуска проверки файла + upload_endpoint: "/api/v1/scan/checkFile" # Заголовок и значение для авторизации в Sandbox auth_header: "X-API-Key" diff --git a/main.py b/main.py index 30dd4ed..04bbe0b 100644 --- a/main.py +++ b/main.py @@ -355,7 +355,7 @@ class PTSandboxClient: def __init__(self, cfg: dict): sb_cfg = cfg["pt_sandbox"] self.base_url = sb_cfg["base_url"].rstrip("/") - self.upload_endpoint = sb_cfg.get("upload_endpoint", "/api/v1/files/upload") + self.upload_endpoint = sb_cfg.get("upload_endpoint", "/api/v1/scan/checkFile") self.auth_header = sb_cfg.get("auth_header", "X-API-Key") self.api_key = sb_cfg.get("api_key", "") self.file_field_name = sb_cfg.get("file_field_name", "file") @@ -380,9 +380,13 @@ class PTSandboxClient: def upload_file(self, file_path: Path) -> Optional[str]: """ - Отправить файл в PT Sandbox на анализ. - Возвращает ID задачи (task_id) или None при ошибке. + Отправить файл в PT Sandbox на анализ (одним запросом — загрузка + запуск проверки). + Возвращает ID задачи (scan_id) или None при ошибке. """ + params = { + "file_name": file_path.name, + "async_result": "true", + } url = f"{self.base_url}{self.upload_endpoint}" logger.info("Отправка файла в Sandbox: %s (%d bytes)", file_path.name, file_path.stat().st_size) @@ -393,18 +397,18 @@ class PTSandboxClient: fields = dict(self.extra_fields) resp = self._session.post( - url, files=files, data=fields, + url, params=params, files=files, data=fields, timeout=(self.timeout_connect, self.timeout_read), verify=self.verify_ssl, ) if resp.status_code in (200, 201, 202): result = resp.json() - task_id = (result.get("task_id") or result.get("id") - or result.get("uuid") or str(result)) - logger.info("Файл %s принят Sandbox. task_id=%s", - file_path.name, task_id) - return str(task_id) + data = result.get("data", {}) + scan_id = data.get("scan_id") or result.get("task_id") or result.get("id") + logger.info("Файл %s принят Sandbox. scan_id=%s", + file_path.name, scan_id) + return str(scan_id) if scan_id else None else: logger.error("Sandbox вернул %s: %s", resp.status_code, resp.text[:500])