คำตอบด่วน
พร็อกซีมือถือ 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
import time
import urllib.robotparser
from urllib.parse import urlsplit
import requests
PROXY = "http://USERNAME-country-us:[email protected]: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 หรือการหลีกเลี่ยงการตรวจจับบอท และ นโยบายการใช้งานที่ยอมรับได้ ของเรา ห้ามอย่างเด็ดขาด หากคุณต้องการข้อมูลที่ซ่อนหลังการท้าทาย ให้ขออนุญาตจากเว็บไซต์ ใช้ 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
แหล่งข้อมูล (4)
- RFC 9309: Robots Exclusion Protocol — IETF (2022-09)
- RFC 6585: รหัสสถานะ HTTP เพิ่มเติม (429) — IETF (2012-04)
- Reddit v. SerpApi LLC — Loeb & Loeb (2026-08)
- Google v. SerpApi: ศาลอนุมัติคำร้องให้ยกฟ้องของเรา — SerpApi (2026-07-21)
พร็อกซีเรซิเดนเชียลสำหรับโปรแกรมรวบรวมข้อมูลที่สุภาพ
US$1.50 สำหรับ 1 GB, US$0.50/GB ตั้งแต่ 50 GB