> ## Documentation Index
> Fetch the complete documentation index at: https://student-213fb9fc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Mode avancé

> Utilisez des proxies avancés pour un scraping fiable sur des sites complexes tout en préservant la confidentialité

Firecrawl propose différents types de proxy pour vous aider à effectuer du scraping sur des sites web de complexité variable. Le type de proxy peut être spécifié à l'aide du paramètre `proxy`.

<div id="proxy-types">
  ### Types de proxy
</div>

Firecrawl prend en charge trois types de proxy :

* **basic** : Proxies pour le scraping de la plupart des sites. Rapides et généralement efficaces.
* **enhanced** : Proxies avancés pour le scraping de sites complexes tout en préservant la confidentialité. Plus lents, mais plus fiables sur certains sites.
* **auto** : Firecrawl réessaiera automatiquement le scraping avec des proxies enhanced si le proxy basic échoue. Si le nouvel essai avec enhanced réussit, 5 crédits seront facturés pour le scraping. Si la première tentative avec basic réussit, seul le coût standard sera facturé.

Si vous ne spécifiez pas de proxy, Firecrawl utilisera auto par défaut.

<div id="using-enhanced-mode">
  ### Utiliser le mode amélioré
</div>

Lors du scraping de sites web complexes, vous pouvez utiliser le mode amélioré pour améliorer votre taux de réussite tout en préservant la confidentialité.

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')

  # Choisissez une stratégie de proxy : 'basic' | 'enhanced' | 'auto'
  doc = firecrawl.scrape('https://example.com', formats=['markdown'], proxy='auto')

  print(doc.warning or 'ok')
  ```

  ```js Node theme={null}
  import Firecrawl from '@mendable/firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  // Choisissez une stratégie de proxy : 'basic' | 'enhanced' | 'auto'
  const doc = await firecrawl.scrape('https://example.com', {
    formats: ['markdown'],
    proxy: 'auto'
  });

  console.log(doc.warning || 'ok');
  ```

  ```bash cURL theme={null}

  // Choisissez une stratégie de proxy : 'basic' | 'enhanced' | 'auto'
  curl -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer fc-YOUR-API-KEY' \
      -d '{
        "url": "https://example.com",
        "proxy": "auto"
      }'

  ```
</CodeGroup>

**Remarque :** les requêtes via le proxy en mode amélioré coûtent 5 crédits par requête.

<div id="using-enhanced-as-a-retry-mechanism">
  ## Utiliser Enhanced comme mécanisme de réessai
</div>

Un modèle courant consiste à d'abord essayer de faire du scraping avec les paramètres de proxy par défaut, puis à réessayer avec le mode Enhanced si vous rencontrez des codes d'état d'erreur spécifiques (401, 403 ou 500) dans le champ `metadata.statusCode` de la réponse. Ces codes d'état peuvent indiquer que le site web bloque votre requête.

<CodeGroup>
  ```python Python theme={null}
  # pip install firecrawl-py

  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="YOUR_API_KEY")

  # First try with basic proxy
  try:
      content = firecrawl.scrape("https://example.com")
      
      # Check if we got an error status code
      status_code = content.get("metadata", {}).get("statusCode")
      if status_code in [401, 403, 500]:
          print(f"Code d'état {status_code} reçu, nouvel essai avec le proxy enhanced")
          # Retry with enhanced proxy
          content = firecrawl.scrape("https://example.com", proxy="enhanced")
      
      print(content["markdown"])
  except Exception as e:
      print(f"Error: {e}")
      # Retry with enhanced proxy on exception
      try:
          content = firecrawl.scrape("https://example.com", proxy="enhanced")
          print(content["markdown"])
      except Exception as e:
          print(f"Enhanced proxy also failed: {e}")
  ```

  ```js Node theme={null}
  // npm install @mendable/firecrawl-js

  import { Firecrawl } from '@mendable/firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: 'YOUR_API_KEY' });

  // Function to scrape with retry logic
  async function scrapeWithRetry(url) {
    try {
      // First try with default proxy
      const content = await firecrawl.scrape(url);
      
      // Check if we got an error status code
      const statusCode = content?.metadata?.statusCode;
      if ([401, 403, 500].includes(statusCode)) {
        console.log(`Code de statut ${statusCode} reçu, nouvelle tentative avec le proxy enhanced`);
        // Retry with enhanced proxy
        return await firecrawl.scrape(url, {
          proxy: 'enhanced'
        });
      }
      
      return content;
    } catch (error) {
      console.error(`Error: ${error.message}`);
      // Retry with enhanced proxy on exception
      try {
        return await firecrawl.scrape(url, {
          proxy: 'enhanced'
        });
      } catch (retryError) {
        console.error(`Enhanced proxy also failed: ${retryError.message}`);
        throw retryError;
      }
    }
  }

  // Usage
  const content = await scrapeWithRetry('https://example.com');
  console.log(content.markdown);
  ```

  ```bash cURL theme={null}
  # First try with default proxy
  RESPONSE=$(curl -s -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "url": "https://example.com"
      }')

  # Extract status code from response
  STATUS_CODE=$(echo $RESPONSE | jq -r '.data.metadata.statusCode')

  # Check if status code indicates we should retry with enhanced
  if [[ "$STATUS_CODE" == "401" || "$STATUS_CODE" == "403" || "$STATUS_CODE" == "500" ]]; then
      echo "Code de statut $STATUS_CODE reçu, nouvel essai avec le proxy amélioré"
      
      # Retry with enhanced proxy
      curl -X POST https://api.firecrawl.dev/v2/scrape \
          -H 'Content-Type: application/json' \
          -H 'Authorization: Bearer YOUR_API_KEY' \
          -d '{
            "url": "https://example.com",
            "proxy": "enhanced"
          }'
  else
      # Output the original response
      echo $RESPONSE
  fi
  ```
</CodeGroup>

Cette approche vous permet d'optimiser votre consommation de crédits en n'utilisant le mode Enhanced que lorsque c'est nécessaire.
