---
read_when:
    - คุณต้องการดึงข้อมูลจาก URL และแยกเนื้อหาที่อ่านได้
    - คุณต้องกำหนดค่า `web_fetch` หรือตัวสำรอง Firecrawl ของมัน
    - คุณต้องการทำความเข้าใจขีดจำกัดและการแคชของ web_fetch
sidebarTitle: Web Fetch
summary: เครื่องมือ web_fetch -- ดึงข้อมูลผ่าน HTTP พร้อมแยกเนื้อหาให้อ่านได้
title: การดึงข้อมูลจากเว็บ
x-i18n:
    generated_at: "2026-07-12T16:54:06Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 8c956b01fce44dc4b8f3ac289b312691c3fe4293ed2e6777fb53f3345dd99e93
    source_path: tools/web-fetch.md
    workflow: 16
---

`web_fetch` ส่งคำขอ HTTP GET แบบธรรมดาและแยกเนื้อหาที่อ่านได้ (แปลง HTML เป็น
Markdown หรือข้อความ) โดย **ไม่** เรียกใช้ JavaScript สำหรับเว็บไซต์ที่พึ่งพา JS อย่างมากหรือ
หน้าที่ป้องกันด้วยการเข้าสู่ระบบ ให้ใช้ [เว็บเบราว์เซอร์](/th/tools/browser) แทน

## เริ่มต้นอย่างรวดเร็ว

เปิดใช้งานโดยค่าเริ่มต้น ไม่ต้องกำหนดค่า:

```javascript
await web_fetch({ url: "https://example.com/article" });
```

## พารามิเตอร์ของเครื่องมือ

<ParamField path="url" type="string" required>
URL ที่จะดึงข้อมูล รองรับเฉพาะ `http(s)`
</ParamField>

<ParamField path="extractMode" type="'markdown' | 'text'" default="markdown">
รูปแบบผลลัพธ์หลังจากแยกเนื้อหาหลัก
</ParamField>

<ParamField path="maxChars" type="number">
ตัดผลลัพธ์ให้เหลือจำนวนอักขระเท่านี้ โดยจำกัดค่าสูงสุดตาม `tools.web.fetch.maxCharsCap`
</ParamField>

## วิธีการทำงาน

<Steps>
  <Step title="ดึงข้อมูล">
    ส่งคำขอ HTTP GET พร้อม User-Agent ที่คล้าย Chrome และส่วนหัว `Accept-Language`
    บล็อกชื่อโฮสต์ส่วนตัว/ภายในและตรวจสอบการเปลี่ยนเส้นทางซ้ำ
  </Step>
  <Step title="แยกเนื้อหา">
    เรียกใช้ Readability (การแยกเนื้อหาหลัก) กับการตอบกลับ HTML
  </Step>
  <Step title="ทางเลือกสำรอง (ไม่บังคับ)">
    หาก Readability ล้มเหลวและมีผู้ให้บริการดึงข้อมูล ระบบจะลองอีกครั้งผ่าน
    ผู้ให้บริการนั้น (เช่น โหมดหลบเลี่ยงบอตของ Firecrawl)
  </Step>
  <Step title="แคช">
    ผลลัพธ์จะถูกแคชไว้ 15 นาที (กำหนดค่าได้) เพื่อลดการ
    ดึงข้อมูล URL เดิมซ้ำ
  </Step>
</Steps>

## การอัปเดตความคืบหน้า

`web_fetch` จะแสดงบรรทัดความคืบหน้าแบบสาธารณะเฉพาะเมื่อการดึงข้อมูลยังคงค้างอยู่
หลังจากห้าวินาที:

```text
กำลังดึงเนื้อหาของหน้า...
```

การพบข้อมูลในแคชอย่างรวดเร็วและการตอบกลับจากเครือข่ายที่รวดเร็วจะเสร็จสิ้นก่อนตัวจับเวลาทำงาน จึง
ไม่แสดงบรรทัดความคืบหน้า การยกเลิกการเรียกจะล้างตัวจับเวลา บรรทัด
ความคืบหน้าเป็นเพียงสถานะ UI ของช่องทางและจะไม่มีเนื้อหาของหน้าที่ดึงมา

## การกำหนดค่า

```json5
{
  tools: {
    web: {
      fetch: {
        enabled: true, // ค่าเริ่มต้น: true
        provider: "firecrawl", // ไม่บังคับ; ละไว้เพื่อตรวจหาอัตโนมัติ
        maxChars: 20000, // จำนวนอักขระผลลัพธ์เริ่มต้น; จำกัดด้วย maxCharsCap
        maxCharsCap: 20000, // ขีดจำกัดตายตัวสำหรับพารามิเตอร์ maxChars
        maxResponseBytes: 750000, // ขนาดดาวน์โหลดสูงสุดก่อนตัดทอน (32000-10000000)
        timeoutSeconds: 30,
        cacheTtlMinutes: 15,
        maxRedirects: 3,
        useTrustedEnvProxy: false, // ให้พร็อกซี HTTP(S) จากสภาพแวดล้อมที่เชื่อถือได้แปลงชื่อ DNS
        readability: true, // ใช้การแยกเนื้อหาด้วย Readability
        userAgent: "Mozilla/5.0 ...", // แทนที่ User-Agent
        ssrfPolicy: {
          allowRfc2544BenchmarkRange: true, // เลือกเปิดใช้สำหรับพร็อกซี IP จำลองที่เชื่อถือได้ซึ่งใช้ 198.18.0.0/15
          allowIpv6UniqueLocalRange: true, // เลือกเปิดใช้สำหรับพร็อกซี IP จำลองที่เชื่อถือได้ซึ่งใช้ fc00::/7
        },
      },
    },
  },
}
```

## ทางเลือกสำรอง Firecrawl

หากการแยกเนื้อหาด้วย Readability ล้มเหลว `web_fetch` สามารถใช้
[Firecrawl](/th/tools/firecrawl) เป็นทางเลือกสำรองเพื่อหลบเลี่ยงบอตและแยกเนื้อหาได้ดียิ่งขึ้น:

```json5
{
  tools: {
    web: {
      fetch: {
        provider: "firecrawl", // ไม่บังคับ; ละไว้เพื่อตรวจหาอัตโนมัติจากข้อมูลประจำตัวที่มี
      },
    },
  },
  plugins: {
    entries: {
      firecrawl: {
        enabled: true,
        config: {
          webFetch: {
            // apiKey: "fc-...", // ไม่บังคับ; ละไว้เพื่อใช้สิทธิ์เริ่มต้นแบบไม่ต้องใช้คีย์
            baseUrl: "https://api.firecrawl.dev",
            onlyMainContent: true,
            maxAgeMs: 172800000, // ระยะเวลาแคช (2 วัน)
            timeoutSeconds: 60,
          },
        },
      },
    },
  },
}
```

`plugins.entries.firecrawl.config.webFetch.apiKey` เป็นตัวเลือกที่ไม่บังคับและรองรับออบเจ็กต์ SecretRef
การกำหนดค่าแบบเดิม `tools.web.fetch.firecrawl.*` จะถูกย้ายโดยอัตโนมัติไปยัง
`plugins.entries.firecrawl.config.webFetch` ผ่าน `openclaw doctor --fix`

<Note>
  หากคุณกำหนดค่า SecretRef สำหรับคีย์ API ของ Firecrawl แต่ไม่สามารถแปลงค่าได้และไม่มี
  ตัวแปรสภาพแวดล้อม `FIRECRAWL_API_KEY` เป็นทางเลือกสำรอง การเริ่มต้น Gateway จะล้มเหลวทันที
</Note>

<Note>
  การแทนที่ `baseUrl` ของ Firecrawl ถูกจำกัดอย่างเข้มงวด: การรับส่งข้อมูลของบริการแบบโฮสต์ใช้
  `https://api.firecrawl.dev`; การแทนที่สำหรับระบบที่โฮสต์เองต้องชี้ไปยังปลายทางส่วนตัวหรือ
  ภายใน และยอมรับ `http://` เฉพาะสำหรับเป้าหมายส่วนตัวเหล่านั้น
</Note>

พฤติกรรมรันไทม์ปัจจุบัน:

- `tools.web.fetch.provider` เลือกผู้ให้บริการทางเลือกสำรองสำหรับการดึงข้อมูลอย่างชัดเจน
- หากละ `provider` ไว้ OpenClaw จะตรวจหาผู้ให้บริการดึงข้อมูลเว็บรายแรกที่พร้อมใช้งานโดยอัตโนมัติ
  จากข้อมูลประจำตัวที่กำหนดค่าไว้ `web_fetch` ที่ไม่ได้ทำงานในแซนด์บ็อกซ์สามารถใช้
  Plugin ที่ติดตั้งไว้ซึ่งประกาศ `contracts.webFetchProviders` และลงทะเบียน
  ผู้ให้บริการที่ตรงกันขณะรันไทม์ ปัจจุบัน Plugin Firecrawl อย่างเป็นทางการมี
  ทางเลือกสำรองนี้
- การเรียก `web_fetch` ในแซนด์บ็อกซ์อนุญาตผู้ให้บริการที่รวมมาในตัว รวมถึงผู้ให้บริการที่ติดตั้ง
  ซึ่งได้รับการยืนยันแหล่งที่มาจาก npm อย่างเป็นทางการหรือ ClawHub ปัจจุบันอนุญาต
  Plugin Firecrawl อย่างเป็นทางการ แต่ยังคงไม่รวม Plugin ดึงข้อมูลภายนอกจากบุคคลที่สาม
- หากปิดใช้งาน Readability `web_fetch` จะข้ามไปใช้ทางเลือกสำรองจากผู้ให้บริการที่เลือก
  โดยตรง หากไม่มีผู้ให้บริการที่พร้อมใช้งาน ระบบจะล้มเหลวแบบปิดกั้น

## พร็อกซีสภาพแวดล้อมที่เชื่อถือได้

หากการปรับใช้ของคุณกำหนดให้ `web_fetch` ต้องผ่านพร็อกซี HTTP(S)
ขาออกที่เชื่อถือได้ ให้ตั้งค่า `tools.web.fetch.useTrustedEnvProxy: true`

ในโหมดนี้ OpenClaw ยังคงตรวจสอบ SSRF ตามชื่อโฮสต์ก่อนส่ง
คำขอ แต่จะให้พร็อกซีแปลงชื่อ DNS แทนการตรึง DNS ภายในเครื่อง
เปิดใช้งานเฉพาะเมื่อพร็อกซีอยู่ภายใต้การควบคุมของผู้ปฏิบัติงานและบังคับใช้
นโยบายขาออกหลังการแปลงชื่อ DNS

<Note>
  หากไม่ได้กำหนดค่าตัวแปรสภาพแวดล้อมของพร็อกซี HTTP(S) หรือโฮสต์เป้าหมายถูกยกเว้นโดย
  `NO_PROXY` `web_fetch` จะกลับไปใช้เส้นทางเข้มงวดตามปกติพร้อมการตรึง DNS
  ภายในเครื่อง
</Note>

## ขีดจำกัดและความปลอดภัย

- `maxChars` ถูกจำกัดไว้ที่ `tools.web.fetch.maxCharsCap` (ค่าเริ่มต้น `20000`)
- เนื้อหาการตอบกลับถูกจำกัดไว้ที่ `maxResponseBytes` (ค่าเริ่มต้น `750000` และจำกัดให้อยู่ระหว่าง
  32000-10000000) ก่อนแยกวิเคราะห์ การตอบกลับที่มีขนาดใหญ่เกินไปจะถูกตัดทอนพร้อมคำเตือน
- ชื่อโฮสต์ส่วนตัว/ภายในถูกบล็อก
- `tools.web.fetch.ssrfPolicy.allowRfc2544BenchmarkRange` และ
  `tools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange` เป็นตัวเลือกเปิดใช้เฉพาะกรณี
  สำหรับชุดพร็อกซี IP จำลองที่เชื่อถือได้ ปล่อยไว้โดยไม่ตั้งค่า เว้นแต่พร็อกซีของคุณจะเป็นเจ้าของ
  ช่วงที่สังเคราะห์เหล่านั้นและบังคับใช้นโยบายปลายทางของตนเอง
- การเปลี่ยนเส้นทางจะถูกตรวจสอบและจำกัดด้วย `maxRedirects` (ค่าเริ่มต้น `3`)
- `useTrustedEnvProxy` เป็นตัวเลือกที่ต้องเปิดใช้อย่างชัดเจน และควรเปิดใช้เฉพาะกับ
  พร็อกซีที่อยู่ภายใต้การควบคุมของผู้ปฏิบัติงาน ซึ่งยังคงบังคับใช้นโยบายขาออกหลังการ
  แปลงชื่อ DNS
- `web_fetch` ทำงานแบบพยายามให้ดีที่สุด -- บางเว็บไซต์จำเป็นต้องใช้ [เว็บเบราว์เซอร์](/th/tools/browser)

## โปรไฟล์เครื่องมือ

หากคุณใช้โปรไฟล์เครื่องมือหรือรายการที่อนุญาต ให้เพิ่ม `web_fetch` หรือ `group:web`:

```json5
{
  tools: {
    allow: ["web_fetch"],
    // หรือ: allow: ["group:web"]  (รวม web_fetch, web_search และ x_search)
  },
}
```

## เนื้อหาที่เกี่ยวข้อง

- [การค้นหาเว็บ](/th/tools/web) -- ค้นหาเว็บด้วยผู้ให้บริการหลายราย
- [เว็บเบราว์เซอร์](/th/tools/browser) -- ระบบอัตโนมัติของเบราว์เซอร์เต็มรูปแบบสำหรับเว็บไซต์ที่พึ่งพา JS อย่างมาก
- [Firecrawl](/th/tools/firecrawl) -- เครื่องมือค้นหาและดึงข้อมูลของ Firecrawl
