คำตอบด่วน
503 Service Unavailable หมายความว่าอย่างไรกับพร็อกซี?
503 Service Unavailable หมายความว่าเซิร์ฟเวอร์ไม่สามารถจัดการคำขอได้ในขณะนี้ เนื่องจากโหลดเกิน, บำรุงรักษา หรือกฎป้องกัน ผ่าน residential proxy ของ CrawlRelay ให้ดูหัวข้อ Retry-After และเนื้อหาตอบกลับ: 503 ที่มาจากบำรุงรักษาหรือโหลดเกินจะหายไปตามเวลา ขณะที่หน้า challenge หมายถึงเว็บไซต์กรองทราฟฟิกอัตโนมัติและคุณควรชะลอการส่งคำขอ
503 Service Unavailable แบบสั้นๆ
| ข้อผิดพลาด | 503 Service Unavailable |
|---|---|
| ประเภท | รหัสสถานะ HTTP (5xx, เซิร์ฟเวอร์ผิดพลาด) |
| ส่งโดย | เว็บไซต์เป้าหมาย, CDN ของเว็บไซต์ หรือ proxy เมื่อไม่มี exit ให้ใช้ |
| กำหนดไว้ใน | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| ลองใหม่อีกครั้งไหม? | ใช่ หลัง Retry-After หรือเวลาหน่วง (backoff) |
| ตรวจสอบก่อน | ตรวจสอบหัวข้อ Retry-After และดูว่าเนื้อหาเป็นหน้า challenge ของ CDN หรือไม่ |
503 Service Unavailable หมายความว่าอย่างไร?
RFC 9110 กำหนด 503 เป็นสถานะชั่วคราว เซิร์ฟเวอร์ยังทำงานอยู่แต่ไม่ยินดีหรือไม่สามารถตอบคำขอในเวลานี้ และอาจแจ้งเวลาที่ให้กลับมาตาม Retry-After
ในทางปฏิบัติ 503 นี้มักเกิดจากสถานการณ์สามอย่าง: เว็บไซต์ที่โหลดเกินหรือกำลังบำรุงรักษาจริง ๆ, CDN ที่แสดงหน้า challenge สำหรับทราฟฟิกที่ถือว่าเป็นอัตโนมัติ และ gateway proxy ที่ไม่มี exit ให้ใช้สำหรับเป้าหมายแคบ เนื้อหาและหัวข้อช่วยแยกแยะ
a 503 เป็นอย่างไรใน Python, curl, Node.js และเบราว์เซอร์?
ข้อผิดพลาดเดียวกันนี้แสดงผลแตกต่างกันในแต่ละเครื่องมือ นี่คือข้อความที่ต้องค้นหาในบันทึกของคุณ:
- Python requests / httpx:
status_code == 503บางครั้งมีRetry-Afterด้วย - Scrapy: พยายามใหม่โดยอัตโนมัติ (503 อยู่ใน
RETRY_HTTP_CODES) - curl:
HTTP/2 503มักมีหัวข้อserver:ระบุ CDN - เบราว์เซอร์: หน้า maintenance หรือหน้า interstitial check
อะไรเป็นสาเหตุของ a 503?
โอกาสสูงสุดอันดับแรก:
- โหลดเกินหรือบำรุงรักษา ของเว็บไซต์เป้าหมาย มักมี
Retry-After - หน้า challenge ที่ CDN แสดงกับลูกค้าที่ต้องการตรวจสอบ สถานะ 503 หรือ 403
- โหลดของคุณเอง เมื่อ crawler ของคุณเป็นส่วนใหญ่ของทราฟฟิกเว็บไซต์
- การระบุเป้าหมายแคบ เช่น เมืองเล็ก ๆ เมื่อไม่มี exit ที่ตรงกับในขณะนั้น
- การล่มของ upstream ที่ CDN หรือภูมิภาคคลาวด์ที่เว็บไซต์ใช้
ฉันวินิจฉัย a 503 ทีละขั้นตอนอย่างไร?
- อ่านหัวข้อ
Retry-Afterและserverจากนั้นดูชื่อ HTML ของหน้า - โหลดหน้าในเบราว์เซอร์จากประเทศเดียวกันเพื่อดูว่าผู้ใช้เห็นอะไร
- หยุด crawler สักครู่และทดสอบคำขอ ถ้าผ่านแสดงว่าโหลดของคุณเป็นสาเหตุ
- ขยายการระบุเป้าหมายเป็นระดับประเทศและเปรียบเทียบ
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLฉันจะแก้ไข a 503 อย่างไร?
- รอและลองใหม่ โดยใช้เวลาหน่วง
Retry-Afterหรือตัวหน่วงแบบ exponential - ลดโหลด บนโฮสต์นั้น: ลดจำนวนคำขอพร้อมกัน, เพิ่มเวลาหน่วง, ใช้แคช
- ถือว่าหน้า challenge เป็นสัญญาณหยุด สำหรับความเร็วนี้ อย่าใช้เครื่องมือแก้ CAPTCHA หรือปลอมเบราว์เซอร์เพื่อผ่าน ควรลดอัตราและติดต่อเว็บไซต์หากจำเป็น
- ขยายการระบุเป้าหมาย เมื่อพบ 503 พร้อมกับตัวกรองเมืองแคบ
import random
import time
import requests
PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}
def fetch(url, attempts=5, timeout=(10, 30)):
for attempt in range(attempts):
try:
r = requests.get(url, proxies=PROXIES, timeout=timeout)
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
r = None # dropped exit, reset or timeout: a new connection gets a new exit
if r is not None and r.status_code not in RETRY_STATUSES:
return r
retry_after = r.headers.get("Retry-After", "") if r is not None else ""
if retry_after.isdigit():
wait = int(retry_after)
else:
wait = min(60, 2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))ฉันควรลองใหม่หลังจาก a 503 ไหม?
ลองใหม่ 503 ด้วยความอดทน ใช้ Retry-After เมื่อมี ไม่เช่นนั้นลดความเร็วแบบ exponential ตั้งแต่ไม่กี่วินาทีจนถึงหนึ่งสองนาที ถ้าโฮสต์ตอบ 503 กับคำขอส่วนใหญ่เกินไม่กี่นาที ให้หยุดโฮสต์นั้นทั้งหมดแล้วกลับมาใหม่ภายหลัง แยกบันทึก challenge page กับการล่มจริง
503 Service Unavailable มีผลอย่างไรกับ CrawlRelay?
CrawlRelay ส่งคำขอของคุณผ่าน residential IP ที่เลือกตามการระบุเป้าหมาย ระดับประเทศใช้ออกที่กว้างสุด ระดับเมืองแคบลง ถ้าเจอ 503 เฉพาะกับตัวกรองเมือง ลองคำขอเดียวกันด้วยระดับประเทศก่อนเปลี่ยนแปลงอื่นใด
เกตเวย์: gw.crawlrelay.com, พอร์ต 7777 (HTTP, HTTPS ผ่าน CONNECT) และพอร์ต 7778 (SOCKS5). รูปแบบชื่อผู้ใช้: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. ที่เกี่ยวข้อง: 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable: คำถามที่นักพัฒนาถาม
ทำไมฉันถึงเจอ 503 เฉพาะผ่าน proxy แต่ไม่เจอที่บ้าน?
ไม่ว่าจะเป็นเพราะเว็บไซต์จัดการทราฟฟิกจาก proxy ของคุณต่างออกไป มักแสดงหน้า challenge หรือการระบุเป้าหมายแคบทำให้ exit หายาก เปรียบเทียบเนื้อหาในสองกรณี หน้า challenge คือสัญญาณให้ชะลอ ข้อความ proxy สั้น ๆ กับตัวกรองแคบคือเพิ่มขอบเขตที่ตั้ง
503 กับการถูกบล็อกเหมือนกันไหม?
ไม่ใช่ 503 จริงเป็นสถานะชั่วคราวและจะหายไปตามเวลา หน้า challenge ที่แสดงพร้อม 503 คือตัวกรอง มักหมายความว่าความถี่หรือรูปแบบการส่งคำขอดูเหมือนอัตโนมัติ ลด concurrency และเพิ่มเวลาหน่วง หากเว็บไซต์ไม่ต้องการให้เข้าถึงอัตโนมัติเลย ให้เคารพและใช้ API หรือข้อมูลที่มีลิขสิทธิ์แทน
ควรลองใหม่ 503 กี่ครั้ง?
สามถึงห้าครั้งพร้อมตัวหน่วงแบบ exponential เป็นขีดจำกัดที่สมเหตุสมผลสำหรับ URL เดียว หากเกินนั้นให้หยุดโฮสต์ทั้งหมดแทนที่จะลองกับ URL เดียว เพราะเว็บไซต์ที่มีปัญหาไม่ฟื้นเร็วขึ้นจากการลองใหม่อย่างเดียว เก็บบันทึกโฮสต์และเวลาเพื่อกลับมาทำต่อทีหลัง
ข้อผิดพลาดพร็อกซีอื่นๆ ในเอกสารอ้างอิงนี้
รหัสสถานะ HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
ข้อผิดพลาดของเบราว์เซอร์และไคลเอนต์
ข้อผิดพลาดการเชื่อมต่อและ TLS
พร็อกซีเรซิเดนเชียลที่มีเอกสารอธิบายกรณีล้มเหลว
พร็อกซีเรซิเดนเชียล CrawlRelay จาก US$0.50/GB, ปริมาณข้อมูลที่ไม่หมดอายุ