Skip to main content

Chargement d’un scan par blocs

L’API Start Scan envoie les grandes bases de code en plusieurs requêtes. Le scan BLAST doit être activé pour votre entreprise, et vous chargez une seule archive source. Ce guide décrit la séquence de chargement. Les champs de requête et les codes de statut se trouvent sur les pages OpenAPI de POST /start-scan, PATCH /start-scan/{transfer_id}/ et HEAD /start-scan/{transfer_id}/.

Séquence de chargement

  1. Démarrer le transfert avec POST /start-scan. Envoyez scan_type=blast comme champ de formulaire et une partie files qui contient le nom de l’archive et un corps vide. Le nom de l’archive doit utiliser l’une des extensions .zip, .tar, .json, .fpr, .sarif ou .xml. La réponse inclut un transfer_id.
  2. Lire l’offset actuel avec HEAD /start-scan/{transfer_id}/. L’en-tête de réponse Upload-Offset indique le prochain octet à envoyer. Un transfert inconnu ou vide renvoie 0.
  3. Charger chaque bloc avec PATCH /start-scan/{transfer_id}/. Envoyez les octets suivants dans chunk_data et incluez ces en-têtes de requête :
    • Upload-Offset : offset actuel en octets
    • Upload-Length : taille totale du fichier en octets
    • Upload-Name : nom de l’archive
  4. Terminer lorsque le dernier PATCH renvoie un scan_id. Les réponses intermédiaires incluent Upload-Offset (prochain octet) et n’incluent pas de scan_id. Lorsque le dernier bloc complète l’archive, le corps JSON contient scan_id et project_id. Cette réponse finale ne définit pas Upload-Offset. Utilisez scan_id avec les API de scans et de problèmes. HEAD ne renvoie pas de scan_id.
Vous pouvez aussi envoyer project_name, branch, repo_url, sha, files_to_scan, dirty, scan_configs et target_policies à chaque requête PATCH. Omettez partial_scan pour un scan complet. Envoyez partial_scan=true uniquement pour un scan partiel.

Authentification

Incluez votre jeton d’API dans chaque requête :

Métadonnées de scan

metadata est une chaîne JSON d’objet facultative, par exemple {"pipeline_url": "https://ci.example/run/123"}. Corgea la valide à chaque requête de bloc et l’associe au scan une fois le chargement terminé : envoyez donc la même valeur avec chaque bloc. L’objet ne doit pas dépasser 16 384 octets.

Exemple Python

Ce script démarre un chargement BLAST ou le reprend avec --transfer_id. Il suit Upload-Offset sur les blocs intermédiaires. Le dernier PATCH renvoie scan_id au lieu de Upload-Offset.
Exemple :
Pour reprendre un chargement interrompu, passez l’ID de transfert existant :
Pour un scan partiel, ajoutez --partial_scan et --files_to_scan "vuln.py,test.py". Pour joindre des métadonnées de scan, ajoutez --metadata '{"pipeline_url":"https://ci.example/run/123"}'. La même valeur est envoyée avec chaque bloc.