> ## 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.

# 拡張モード

> 拡張プロキシを使用して、プライバシーを保護しながら複雑なサイトを安定してスクレイピングできる

Firecrawl は、さまざまな複雑さのウェブサイトをスクレイピングするために、複数の種類のプロキシを提供しています。プロキシの種類は、`proxy` パラメータで指定できます。

<div id="proxy-types">
  ### プロキシの種類
</div>

Firecrawl は 3 種類のプロキシをサポートしています:

* **basic**: ほとんどのサイトのスクレイピングに適したプロキシ。高速で、通常は問題なく動作します。
* **enhanced**: 複雑なサイトをプライバシーを維持しつつスクレイピングするための強化されたプロキシ。速度は遅くなりますが、一部のサイトではより高い信頼性で動作します。
* **auto**: basic プロキシが失敗した場合、Firecrawl が自動的に enhanced プロキシで再試行します。enhanced での再試行が成功した場合、そのスクレイピングには 5 クレジットが消費されます。最初の basic での試行が成功した場合は、通常のクレジット消費のみとなります。

プロキシを指定しない場合、Firecrawl はデフォルトで auto を使用します。

<div id="using-enhanced-mode">
  ### Enhancedモードの使用
</div>

複雑なWebサイトをスクレイピングする場合は、Enhancedモードを有効にすることで、プライバシーを保ちつつ成功率を高められます。

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

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

  # プロキシの方式を選択: '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" });

  // プロキシ方式を選択: 'basic' | 'enhanced' | 'auto'
  const doc = await firecrawl.scrape('https://example.com', {
    formats: ['markdown'],
    proxy: 'auto'
  });

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

  ```bash cURL theme={null}

  // プロキシの方式を選択: '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>

**注意:** Enhancedプロキシリクエストを利用すると、1リクエストあたり5クレジットが消費されます。

<div id="using-enhanced-as-a-retry-mechanism">
  ## 再試行メカニズムとして Enhanced を使用する
</div>

一般的なパターンとして、まずはデフォルトのプロキシ設定でスクレイピングを行い、レスポンスの `metadata.statusCode` フィールドに特定のエラーステータスコード（401、403、または 500）が含まれている場合に、Enhanced モードで再試行します。これらのステータスコードは、サイト側でリクエストがブロックされている可能性を示します。

<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"ステータスコード {status_code} を受け取りました。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(`ステータスコード ${statusCode} を検出。拡張プロキシで再試行します`);
        // 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 "ステータスコード $STATUS_CODE を受信。enhancedプロキシで再試行します"
      
      # 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>

このアプローチにより、必要な場合にのみ Enhanced モードを使用することで、クレジットの使用量を最適化できます。
