คำตอบด่วน
502 Bad Gateway หมายความว่าอย่างไรกับพร็อกซี?
502 Bad Gateway หมายถึงเกตเวย์หรือพร็อกซีได้รับคำตอบไม่ถูกต้อง หรือไม่มีเลย จากเซิร์ฟเวอร์ถัดไปในเส้นทาง ผ่านพร็อกซี residential ของ CrawlRelay โดยทั่วไป 502 หมายถึงการเชื่อมต่อ exit หรือตัวเป้าหมายล้มเหลวก่อนเสร็จคำขอ ลองใหม่หนึ่งครั้งบนการเชื่อมต่อใหม่ หาก 502 ยังเกิดขึ้นที่ไซต์เดียว แสดงว่าเป็นปัญหาไซต์ ถ้าเกิดกับทุกไซต์ ให้ตรวจสอบการตั้งค่าของคุณ
502 Bad Gateway แบบสั้นๆ
| ข้อผิดพลาด | 502 Bad Gateway |
|---|---|
| ประเภท | รหัสสถานะ HTTP (5xx, เซิร์ฟเวอร์ผิดพลาด) |
| ส่งโดย | เกตเวย์พร็อกซีหรือพร็อกซีย้อนกลับหน้าปลายทาง |
| กำหนดไว้ใน | RFC 9110, section 15.6.3 |
| ลองใหม่อีกครั้งไหม? | ใช่ เมื่อเชื่อมหรือเซสชันใหม่ |
| ตรวจสอบก่อน | ลองใหม่หนึ่งครั้งบน IP ใหม่ หากยังเกิดขึ้น ทดสอบเป้าหมายโดยไม่ใช้พร็อกซี |
502 Bad Gateway หมายความว่าอย่างไร?
RFC 9110 บรรยาย 502 ว่าเป็นวิธีของเกตเวย์ในการบอกว่าเซิร์ฟเวอร์ตอบไม่ดี ในเส้นสแครปมีอย่างน้อยสองเกตเวย์: พร็อกซี และมักเป็น CDN หรือ load balancer หน้าเว็บไซต์ อย่างใดอย่างหนึ่งอาจสร้าง 502 และเนื้อหาการตอบกลับมักบอกว่าอันไหน
เครือข่าย residential เพิ่มลิงก์อีกหนึ่ง ชั้น exit เป็นการเชื่อมต่อจากครัวเรือนจริง และอุปกรณ์อาจออกจากเครือข่ายกลางคำขอ ทำให้เกตเวย์ไม่มีคำตอบที่ถูกต้องส่งกลับ
a 502 เป็นอย่างไรใน Python, curl, Node.js และเบราว์เซอร์?
ข้อผิดพลาดเดียวกันนี้แสดงผลแตกต่างกันในแต่ละเครื่องมือ นี่คือข้อความที่ต้องค้นหาในบันทึกของคุณ:
- Python requests:
status_code == 502หรือProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 502 Bad Gateway'))สำหรับเป้าหมาย HTTPS - curl:
curl: (56) CONNECT tunnel failed, response 502 - เบราว์เซอร์:
net::ERR_TUNNEL_CONNECTION_FAILEDสำหรับ HTTPS หรือหน้าแสดงข้อผิดพลาดปกติ HTTP - Scrapy: ลองใหม่อัตโนมัติ เพราะ 502 อยู่ใน
RETRY_HTTP_CODES
อะไรเป็นสาเหตุของ a 502?
โอกาสสูงสุดอันดับแรก:
- exit ออกจากกลุ่มขณะกำลังส่งคำขอ เกิดขึ้นในเครือข่าย residential ทุกแห่ง
- เป้าหมายปิดการเชื่อมต่อ ล่ม หรือส่งข้อมูลผิดรูปแบบ
- CDN ของเป้าหมายล้มเหลว เข้าถึงเซิร์ฟเวอร์ต้นทางไม่สำเร็จ
- DNS ผิดพลาดสำหรับเป้าหมายที่ exit เช่น พิมพ์ชื่อโฮสต์ผิด
- การกำหนดเป้าหมายที่แคบมาก มี exit น้อยเกินไป ทำให้เกิดข้อผิดพลาดซ้ำที่กลุ่มเล็กเดียวกัน
ฉันวินิจฉัย a 502 ทีละขั้นตอนอย่างไร?
- ลองใหม่คำขอบนการเชื่อมต่อใหม่ 502 ครั้งเดียวที่หายไปคือ exit หลุด
- อ่านเนื้อหาและ header ตอบกลับ หน้า error ของ CDN จะบอกชื่อ CDN; ข้อความพร็อกซีสั้นบอกเกตเวย์
- ทดสอบเป้าหมายจากการเชื่อมต่อของคุณเองโดยไม่ใช้พร็อกซี
- ขยายเป้าหมายจากเมืองไปประเทศและเปรียบเทียบอัตราความล้มเหลว
# 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 502 อย่างไร?
- ลองใหม่ด้วย session ID ใหม่ หรือไม่ใช้เลย เพื่อให้ออกจากทาง exit อื่น
- ตั้ง timeout ที่เหมาะสม เพื่อให้ exit ที่ล้มหรือไม่ตอบล้มเหลวเร็ว ไม่ค้าง
- บันทึก 502 ต่อโฮสต์ และหยุดโฮสต์ที่อัตรา 502 พุ่งสูง: อาจล่ม
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 502 ไหม?
ใช่ ลอง 502 ใหม่ แต่เปลี่ยน exit และจำกัดจำนวน ลอง 2-3 ครั้งพร้อมหน่วงเวลาสั้นๆ ก็พอแล้ว 502 ที่ยังเกิดกับหลาย exit หมายถึงปัญหาเป้าหมาย และการลองใหม่มากกว่านี้ไม่ช่วย ให้ติดตามอัตราต่อโฮสต์เพื่อไม่ให้ไซต์ล่มตัวเดียวเต็มคิวลองใหม่ของคุณ
502 Bad Gateway มีผลอย่างไรกับ CrawlRelay?
กับ CrawlRelay ละทิ้งหรือสร้าง session ID ใหม่เพื่อให้ออกทาง residential IP ต่างกัน เซสชันคงที่ผูกคุณกับ exit เดียว ดังนั้น 502 ในเซสชันคงที่ควรจบเซสชันนั้นในโค้ดของคุณ คำแนะนำเซสชัน อธิบายวิธีหมุนเซสชันอย่างสะอาด
เกตเวย์: gw.crawlrelay.com, พอร์ต 7777 (HTTP, HTTPS ผ่าน CONNECT) และพอร์ต 7778 (SOCKS5). รูปแบบชื่อผู้ใช้: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. ที่เกี่ยวข้อง: 504 Gateway Timeout · Connection reset · 503 Service Unavailable.
502 Bad Gateway: คำถามที่นักพัฒนาถาม
502 เป็นความผิดของ proxy หรือเว็บไซต์กันแน่?
ทั้งสองอย่าง อ่านข้อมูลในส่วนของเนื้อหาตอบกลับ: หน้า error ของ CDN จะระบุชื่อ CDN ที่ชี้ไปยังเว็บไซต์ 502 ที่เกิดขึ้นกับทุกเว็บไซต์ที่คุณลอง แสดงว่าเป็นปัญหาของ proxy หรือการตั้งค่าของคุณ ในขณะที่ 502 ที่เกิดกับเว็บไซต์เดียวแสดงว่าเป็นที่เว็บไซต์นั้น ทดสอบ URL เดิมโดยไม่ใช้ proxy เพื่อความแน่ใจ
ทำไมข้อผิดพลาด 502 ถึงพบได้บ่อยกับ residential proxy?
Residential exit คือการเชื่อมต่อจากบ้านจริง ๆ ซึ่งอุปกรณ์อาจออฟไลน์ เปลี่ยนเครือข่าย หรือสัญญาณหายไป คำขอที่อยู่ระหว่างส่งเมื่อเหตุการณ์เหล่านี้เกิดขึ้นจะจบด้วย 502 หรือ reset ตัว scraper ที่ดีควรถือว่าเป็นเรื่องปกติและลองใหม่ด้วย exit ใหม่ โดยตั้งขีดจำกัดเล็กน้อย
ควรเปลี่ยนไปใช้ sticky sessions เพื่อลด 502 หรือไม่?
ไม่ใช่ Sticky session จะทำให้คุณใช้ทางออกเดียว ถ้าทางออกนั้นล้มเหลว คำขอทั้งหมดใน session นั้นก็จะล้มเหลวตาม ใช้การเชื่อมต่อแบบหมุนเวียนสำหรับหน้าเว็บอิสระ และ sticky session สำหรับขั้นตอนหลายชั้นเท่านั้น จบ sticky session หลังเกิด 502 แล้วเริ่มใหม่
ข้อผิดพลาดพร็อกซีอื่นๆ ในเอกสารอ้างอิงนี้
รหัสสถานะ 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, ปริมาณข้อมูลที่ไม่หมดอายุ