Skip to main content

Carga de escaneos por fragmentos

La API Start Scan sube bases de código grandes en varias solicitudes. El escaneo BLAST debe estar habilitado para tu empresa y solo puedes subir un archivo de origen. Esta guía describe la secuencia de carga. Los campos de solicitud y los códigos de estado están en las páginas OpenAPI de POST /start-scan, PATCH /start-scan/{transfer_id}/ y HEAD /start-scan/{transfer_id}/.

Secuencia de carga

  1. Inicia la transferencia con POST /start-scan. Envía scan_type=blast como campo de formulario y una parte files con el nombre del archivo y un cuerpo vacío. El nombre del archivo debe usar una de estas extensiones: .zip, .tar, .json, .fpr, .sarif o .xml. La respuesta incluye un transfer_id.
  2. Lee el desplazamiento actual con HEAD /start-scan/{transfer_id}/. La cabecera de respuesta Upload-Offset indica el siguiente byte que debes enviar. Una transferencia desconocida o vacía devuelve 0.
  3. Sube cada fragmento con PATCH /start-scan/{transfer_id}/. Envía los bytes siguientes como chunk_data e incluye estas cabeceras de solicitud:
    • Upload-Offset: desplazamiento actual en bytes
    • Upload-Length: tamaño total del archivo en bytes
    • Upload-Name: nombre del archivo
  4. Termina cuando el último PATCH devuelve un scan_id. Las respuestas intermedias incluyen Upload-Offset (siguiente byte) y no incluyen scan_id. Cuando el último fragmento completa el archivo, el cuerpo JSON incluye scan_id y project_id. Esa respuesta final no establece Upload-Offset. Usa el scan_id con las APIs de escaneos y de problemas. HEAD no devuelve scan_id.
También puedes enviar project_name, branch, repo_url, sha, files_to_scan, dirty, scan_configs y target_policies en cada solicitud PATCH. Omite partial_scan para un escaneo completo. Envía partial_scan=true solo para un escaneo parcial.

Autenticación

Incluye tu token de API en cada solicitud:

Metadatos del escaneo

metadata es una cadena de objeto JSON opcional, por ejemplo {"pipeline_url": "https://ci.example/run/123"}. Corgea la valida en cada solicitud de fragmento y la adjunta al escaneo cuando termina la carga, así que envía el mismo valor con cada fragmento. El objeto no debe superar los 16.384 bytes.

Ejemplo en Python

Este script inicia una carga BLAST o la reanuda con --transfer_id. Sigue Upload-Offset en los fragmentos intermedios. El último PATCH devuelve scan_id en lugar de Upload-Offset.
Ejemplo:
Para reanudar una carga interrumpida, pasa el ID de transferencia existente:
Para un escaneo parcial, añade --partial_scan y --files_to_scan "vuln.py,test.py". Para adjuntar metadatos del escaneo, añade --metadata '{"pipeline_url":"https://ci.example/run/123"}'. Se envía el mismo valor con cada fragmento.