# 403, 429 และ CAPTCHAs: ตอบสนอง อย่าหลีกเลี่ยง

> วิธีจัดการกับ 403, 429 และ CAPTCHAs ขณะขูดข้อมูล: ความหมายของแต่ละสัญญาณ ครอลเลอร์ Python ที่สุภาพกับ robots.txt และ Retry-After สิ่งที่ไม่ควรทำ

- URL: https://crawlrelay.com/th/guides/403-429-captcha/
- อัปเดตล่าสุด: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

รหัส 403, 429 หรือ CAPTCHA คือเว็บไซต์สื่อสารกับพร็อกซี่มือถือ 4G ของคุณ คำตอบที่ถูกต้องเกือบทั้งหมดคือการชะลอความเร็ว อ่านกฎ หรือสอบถาม ส่วนคำตอบที่ผิดคือการปิดบังพร็อกซีเรซิเดนเชียล นี่คือวิธีการฝังคำตอบที่ถูกต้องลงในโค้ด

**คำตอบด่วน — พร็อกซีมือถือ 4G ควรจัดการกับรหัส 403, 429 และ CAPTCHA อย่างไร?**

พิจารณาเป็นสัญญาณ ไม่ใช่อุปสรรค สำหรับ **429** ให้รอ `Retry-After` และลดอัตราการร้องขอบนโฮสต์นั้น ๆ สำหรับ **403** ให้ลองใหม่ครั้งหนึ่งหลังจากหยุดพัก แล้วหยุดและตรวจสอบกฎของเว็บไซต์ สำหรับ **CAPTCHA** ให้หยุดโฮสต์นั้น อย่าแก้ CAPTCHA อัตโนมัติ **CrawlRelay พร็อกซีเรซิเดนเชียล** จาก US$0.50/GB ช่วยกระจายโหลดและตั้งค่าตำแหน่ง ไม่ใช่วิธีหลีกเลี่ยงการตัดสินใจของเว็บไซต์ ไม่มี KYC จ่ายด้วยคริปโต

## สัญญาณสามแบบโดยย่อ

| คุณลักษณะ | ค่า |
| --- | --- |
| 429 ขอมากเกินไป | คุณเร็วเกินไป ให้เคารพ Retry-After, ถอยกลับ, ลดคู่ขนานต่อโฮสต์ |
| 403 Forbidden | คำขอนี้ถูกรปฏิเสธ ลองอีกครั้งหนึ่งหลังหยุดพัก แล้วหยุดและตรวจสอบ |
| CAPTCHA หรือหน้าทดสอบ | เว็บไซต์ต้องการตรวจสอบว่าคุณเป็นมนุษย์หรือไม่ หยุดโฮสต์และชะลอความเร็ว |
| มาตรฐานสำหรับกฎการรวบรวมข้อมูล | robots.txt, RFC 9309; Crawl-delay เป็นส่วนขยายที่ใช้บ่อย |
| สิ่งที่เราไม่รองรับ | การแก้ CAPTCHA, ปลั๊กอินซ่อนตัว, ปลอมลายนิ้วมือ |

## สัญญาณแต่ละแบบบอกพร็อกซีมือถือ 4G ของฉันว่าอย่างไร?

- **429** คือสัญญาณสุภาพที่สุด: เนื้อหามีอยู่ แต่ไม่ใช่ตามจังหวะของคุณ RFC 6585 กำหนดค่าไว้ มักมีเฮดเดอร์ `Retry-After` แจ้งเวลาที่ควรกลับมา
- **403** คือการปฏิเสธคำขอนี้ อาจแก้ไขได้ (ประเทศผิด, เฮดเดอร์ไม่ครบ, เร็วเกินไป) หรือถาวร (เว็บไซต์ไม่อนุญาตให้เข้าถึงอัตโนมัติ)
- **CAPTCHA หรือหน้าท้าทาย** ที่มาพร้อมสถานะ 403 หรือ 503 หมายความว่าการจัดการบอทของเว็บไซต์สงสัยการเข้าชมของคุณ เป็นขั้นตอนต่อจากการเพิกเฉย 429

ทุกสัญญาณนี้เป็นสัญญาณเพิ่มขึ้น เว็บไซต์ที่ถูกเพิกเฉย 429 จะยกระดับเป็น 403 และท้าทาย จากนั้นถูกบล็อกช่วง IP ยาว ๆ ซึ่งกระทบผู้ใช้ทุกคนในช่วงนั้น

## พร็อกซีมือถือ 4G ควรทำอย่างไรกับแต่ละสัญญาณ?

| สัญญาณ | การตอบสนองแรก | ถ้ายังเกิดขึ้น | หยุดเมื่อ |
| --- | --- | --- | --- |
| 429 | รอ Retry-After หรือถอยกลับแบบทวีคูณโดยมี jitter | ลดคู่ขนานลงครึ่งหนึ่งบนโฮสต์นั้น | Retry-After เพิ่มขึ้นเรื่อย ๆ หรือ 429 ยังเกิดที่ 1 คำขอทีละรายการ |
| 403 | ลองใหม่ครั้งหนึ่งหลังหยุดพัก ในประเทศเดียวกัน | เปรียบเทียบกับเบราว์เซอร์จากประเทศเดียวกัน; ตรวจสอบ robots.txt และข้อกำหนด | 403 ครั้งที่สองใน URL รูปแบบเดียวกัน |
| CAPTCHA / ท้าทาย | หยุดโฮสต์เป็นเวลาหลายนาที | เริ่มใหม่ที่อัตราต่ำมาก | ท้าทายยังคงเกิดที่อัตราต่ำ: เว็บไซต์ไม่ต้องการให้เข้าถึงอัตโนมัติ |
| 503 พร้อม Retry-After | รอตามที่ขอ | หยุดโฮสต์ | คำขอล้มเหลวมากกว่านาทีหลาย ๆ นาที |

## จะสร้างพร็อกซีมือถือ 4G ที่ตอบสนองถูกต้องได้อย่างไร?

ฝังกฎไว้ใน fetcher ไม่ใช่ในแต่ละ spider นี่ส่งคำขอครั้งละหนึ่งคำขอต่อโฮสต์ เคารพ robots.txt และ `Crawl-delay`, รอ `Retry-After` และหยุดขอโฮสต์หลังถูกปฏิเสธ 3 ครั้งติดต่อกัน พิจารณา 4xx robots.txt เป็นการอนุญาต และ 5xx เป็นการปฏิเสธเต็มรูปแบบตาม RFC 9309

*Python: fetcher สุภาพ*

```python
import time
import urllib.robotparser
from urllib.parse import urlsplit

import requests

PROXY = "http://USERNAME-country-us:PASSWORD@gw.crawlrelay.com:7777"
USER_AGENT = "ExampleCrawler/1.0 (+https://example.com/crawler-info)"


class PoliteFetcher:
    """One request at a time per host; robots.txt, Crawl-delay and Retry-After honoured."""

    def __init__(self, min_interval=1.0, max_refusals=3):
        self.min_interval, self.max_refusals = min_interval, max_refusals
        self.http = requests.Session()
        self.http.proxies = {"http": PROXY, "https": PROXY}
        self.http.headers["User-Agent"] = USER_AGENT
        self.robots, self.next_time, self.refusals = {}, {}, {}

    def _robots(self, root):
        if root not in self.robots:
            rp = urllib.robotparser.RobotFileParser(root + "/robots.txt")
            try:
                r = self.http.get(root + "/robots.txt", timeout=(10, 30))
                if r.status_code >= 500:
                    rp.parse(["User-agent: *", "Disallow: /"])  # unreachable: assume disallow
                else:
                    rp.parse(r.text.splitlines() if r.status_code == 200 else [])  # 4xx: allowed
            except requests.RequestException:
                rp.parse(["User-agent: *", "Disallow: /"])
            self.robots[root] = rp
        return self.robots[root]

    def get(self, url):
        scheme, host = urlsplit(url)[:2]
        if self.refusals.get(host, 0) >= self.max_refusals:
            return None  # this host said no: stop asking
        rp = self._robots("%s://%s" % (scheme, host))
        if not rp.can_fetch(USER_AGENT, url):
            return None
        delay = max(self.min_interval, rp.crawl_delay(USER_AGENT) or 0)
        wait = self.next_time.get(host, 0) - time.monotonic()
        if wait > 0:
            time.sleep(wait)
        r = self.http.get(url, timeout=(10, 30))
        pause = delay
        if r.status_code in (429, 503):
            retry_after = r.headers.get("Retry-After", "")
            pause = max(delay, int(retry_after) if retry_after.isdigit() else 60)
        refused = r.status_code in (403, 429) or "captcha" in r.text[:5000].lower()
        self.refusals[host] = self.refusals.get(host, 0) + 1 if refused else 0
        self.next_time[host] = time.monotonic() + pause
        return r


fetcher = PoliteFetcher()
resp = fetcher.get("https://example.com/")
print(resp.status_code if resp is not None else "skipped")
```

## อะไรที่แก้ไข 403 ได้อย่างถูกต้อง?

สาเหตุหลายอย่างของ 403 มาจากฝั่งคุณ และการแก้ไขเป็นเรื่องเหมาะสม:

- **ประเทศผิด** หลายเว็บไซต์ให้บริการเฉพาะภูมิภาค เลือกเป้าหมายด้วย `-country-<code>`
- **เฮดเดอร์ไม่ครบ** ส่ง `Accept`, `Accept-Language` และ user agent ที่ซื่อสัตย์พร้อม URL ติดต่อ ผู้ใช้เบราว์เซอร์เหมือนกันในไคลเอนต์ HTTP ธรรมดามักถูกปฏิเสธ
- **จังหวะของคุณเอง** 403 ที่เริ่มหลังคำขอหลายครั้งคือปัญหาอัตรา ชะลอความเร็ว

สิ่งที่ไม่ใช่การแก้ไข: หมุน user agents ให้เหมือนหลายคน, ปลอมลายนิ้วมือเบราว์เซอร์, หรือหมุน IP เพื่อหลีกเลี่ยงบล็อกที่เว็บไซต์ตั้งใจไว้ ถ้าเว็บไซต์กรองช่วงโฮสติ้งเพื่อป้องกันการเข้าชมอัตโนมัติ IP พร็อกซีเรซิเดนเชียล ไม่ได้ทำให้เข้าถึงได้ตามกฎเว็บไซต์

## ทำไมไม่แก้แค่ CAPTCHAs?

เพราะ CAPTCHA คือการที่เว็บไซต์ถามคำถามซึ่งคุณจะตอบผิดโดยเจตนา การแก้ CAPTCHA อัตโนมัติเปลี่ยนโปรแกรมรวบรวมข้อมูลที่สุภาพให้กลายเป็นเครื่องมือที่สร้างมาเพื่อเอาชนะการควบคุมการเข้าถึง ซึ่งเพิ่มความเสี่ยงทางกฎหมายของคุณ: คดีในสหรัฐฯ ปี 2026 เกี่ยวกับการขูดข้อมูลจากการค้นหาอย่าง Google v. SerpApi, Reddit v. SerpApi และอื่นๆ อ้างว่าจำเลยได้หลีกเลี่ยงระบบป้องกันบอทตามกฎต่อต้านการเลี่ยงของ DMCA ศาลยังไม่ตัดสินในประเด็นนี้ แต่ความเสี่ยงมีจริง

CrawlRelay ไม่สนับสนุนการแก้ CAPTCHA หรือการหลีกเลี่ยงการตรวจจับบอท และ [นโยบายการใช้งานที่ยอมรับได้](https://crawlrelay.com/th/acceptable-use/) ของเรา ห้ามอย่างเด็ดขาด หากคุณต้องการข้อมูลที่ซ่อนหลังการท้าทาย ให้ขออนุญาตจากเว็บไซต์ ใช้ API ของเขา หรือจดสิทธิบัตรข้อมูลนั้นแทน

## ควรติดต่อเว็บไซต์เมื่อไร?

เมื่อคุณต้องการเกินขีดจำกัดเริ่มต้นของเว็บไซต์ หลายเว็บมี API ฟีดข้อมูล โปรแกรมคู่ค้าหรือจำกัดสูงขึ้นสำหรับโปรแกรมรวบรวมข้อมูลที่ระบุตัวเองและอธิบายวัตถุประสงค์ ใส่ URL ติดต่อใน user agent ของคุณ เก็บหน้าที่อธิบายโปรแกรมรวบรวมข้อมูลของคุณและวิธีเลือกไม่ใช้บริการ และตอบรายงานการละเมิดอย่างรวดเร็ว โปรแกรมรวบรวมข้อมูลที่ติดต่อได้จะได้รับคำเตือนก่อนถูกบล็อก

## 403, 429 และ CAPTCHAs: คำถามที่พบบ่อย

### พร็อกซีเรซิเดนเชียลจะหยุด CAPTCHA ได้ไหม?

อย่าไว้วางใจเกินไป พร็อกซีเรซิเดนเชียลเปลี่ยน IP ที่เว็บไซต์เห็น ไม่ใช่พฤติกรรมโปรแกรมรวบรวมข้อมูลของคุณ: CAPTCHA ที่เกิดจากความเร็วหรือพฤติกรรมยังคงมีอยู่ ซึ่งเป็นเจตนา หากยังเจอ CAPTCHA แม้ส่งคำขอช้า แสดงว่าเว็บไซต์ไม่อนุญาตให้เข้าถึงข้อมูลเหล่านั้นโดยอัตโนมัติ

### ควรรอเท่าไรหลังได้รับ 429 ไม่มี Retry-After?

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

### การสลับ IP เพื่อหลีกเลี่ยงขีดจำกัดถือว่าอนุญาตไหม?

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

### โปรแกรมรวบรวมข้อมูลควรส่ง user agent แบบไหน?

ให้ใช้ของคุณเอง: ชื่อ เวอร์ชัน และ URL ที่อธิบายโปรแกรมรวบรวมข้อมูลและวิธีติดต่อ เช่น `ExampleCrawler/1.0 (+https://example.com/crawler-info)` อย่าใช้ชื่อโปรแกรมรวบรวมข้อมูลอื่นๆ เช่น Googlebot หรือ GPTBot

## แหล่งข้อมูล

1. [RFC 9309: Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html) — IETF (2022-09)
2. [RFC 6585: รหัสสถานะ HTTP เพิ่มเติม (429)](https://www.rfc-editor.org/rfc/rfc6585) — IETF (2012-04)
3. [Reddit v. SerpApi LLC](https://www.loeb.com/en/insights/publications/2026/08/reddit-v-serpapi-llc) — Loeb & Loeb (2026-08)
4. [Google v. SerpApi: ศาลอนุมัติคำร้องให้ยกฟ้องของเรา](https://serpapi.com/blog/google-v-serpapi-the-court-granted-our-motion-to-dismiss/) — SerpApi (2026-07-21)

**พร็อกซีเรซิเดนเชียลสำหรับโปรแกรมรวบรวมข้อมูลที่สุภาพ** US$1.50 สำหรับ 1 GB, US$0.50/GB ตั้งแต่ 50 GB [ดูราคา](https://crawlrelay.com/th/pricing/) · [อ้างอิงข้อผิดพลาด](https://crawlrelay.com/th/docs/errors/)

---

CrawlRelay: CrawlRelay คือพร็อกซีเรซิเดนเชียลหมุนเวียนพร้อมพร็อกซีมือถือ 4G/5G สำหรับนักพัฒนา เหมาะกับสแครปเปอร์และระบบจัดการข้อมูล AI: เติมเงินจ่ายตามการใช้งานจาก US$0.50/GB จ่ายด้วยคริปโต ไม่ต้องอัปโหลดบัตรประชาชน ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องถ่ายเซลฟี่ ไม่ต้องใช้เอกสาร จ่ายด้วยคริปโต
