คำตอบด่วน
Cannot connect to proxy (ProxyError) หมายความว่าอย่างไรกับพร็อกซี?
'ไม่สามารถเชื่อมต่อกับโปรกซี' คือข้อผิดพลาดแบบครอบคลุม: requests และ urllib3 ของ Python จะใส่เหตุผลจริงไว้ข้างใน อ่านสาเหตุภายในสุด 'เชื่อมต่อถูกปฏิเสธ' หรือหมดเวลา หมายถึงปัญหาที่โฮสต์ พอร์ต หรือเครือข่าย; 'ไม่สามารถแก้ไขชื่อได้' หมายถึง DNS; 'การเชื่อมต่ออุโมงค์ล้มเหลว: 407' หมายถึงข้อมูลประจำตัว กับ CrawlRelay แต่ละประเภทนี้มีวิธีแก้ไขแบบบรรทัดเดียว
Cannot connect to proxy (ProxyError) แบบสั้นๆ
| ข้อผิดพลาด | Cannot connect to proxy (ProxyError) |
|---|---|
| ประเภท | ข้อผิดพลาดไลบรารีไคลเอ็นต์ (Python, Node.js) |
| ส่งโดย | HTTP client ของคุณ ก่อนหรือขณะพูดคุยกับพร็อกซี |
| กำหนดไว้ใน | Library error; read the nested cause for the real reason |
| ลองใหม่อีกครั้งไหม? | ขึ้นอยู่กับสาเหตุภายใน |
| ตรวจสอบก่อน | อ่านข้อยกเว้นภายในสุด: ปฏิเสธ, หมดเวลา, แก้ชื่อไม่ได้ หรือรหัสสถานะ |
Cannot connect to proxy (ProxyError) หมายความว่าอย่างไร?
urllib3 จะโยน ProxyError ทุกครั้งที่ล้มเหลวเกี่ยวกับโปรกซี และ requests จะส่งต่อข้อผิดพลาดนั้น ข้อมูลที่เป็นประโยชน์จะอยู่ในข้อยกเว้นซ้อนกัน ซึ่ง traceback จะแสดงท้ายข้อความยาวๆ
ไคลเอนต์ Node.js ทำงานแตกต่างกัน: จะแจ้งข้อผิดพลาดซ็อกเก็ตตรงๆ เช่น ECONNREFUSED หรือ ETIMEDOUT โดยมักไม่บอกว่าที่อยู่ คือโปรกซี
'Cannot connect to proxy' เป็นอย่างไรใน Python, curl, Node.js และเบราว์เซอร์?
ข้อผิดพลาดเดียวกันนี้แสดงผลแตกต่างกันในแต่ละเครื่องมือ นี่คือข้อความที่ต้องค้นหาในบันทึกของคุณ:
- ปฏิเสธ:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)ภายในProxyError - ข้อมูลประจำตัว:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - ข้อผิดพลาดเกตเวย์:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUTหรือENOTFOUNDตามด้วยที่อยู่ของโปรกซี
อะไรเป็นสาเหตุของ 'Cannot connect to proxy'?
โอกาสสูงสุดอันดับแรก:
- โฮสต์หรือพอร์ตไม่ถูกต้อง ใน URL โปรกซี
- ไม่มีสคีม:
host:portที่ไม่มีhttp://อาจถูกแปลความหมายแปลกๆ โดยไลบรารีบางตัว - ถูกบล็อกการรับส่งข้อมูลขาออก บนเครือข่ายหรือเซิร์ฟเวอร์ของคุณ
- ข้อผิดพลาดข้อมูลประจำตัวหรือเกตเวย์ ที่เกิดขึ้นระหว่างขั้นตอน CONNECT ซ้อนอยู่ในข้อยกเว้นเดียวกัน
- ตัวแปรสภาพแวดล้อม เช่น
HTTPS_PROXYที่ชี้ไปยังโปรกซีเก่า และเขียนทับโค้ดของคุณ
ฉันวินิจฉัย 'Cannot connect to proxy' ทีละขั้นตอนอย่างไร?
- พิมพ์ข้อความข้อยกเว้นทั้งหมดและอ่านสาเหตุในสุดที่ซ้อนอยู่
- พิมพ์
requests.utils.get_environ_proxies(url)หรือHTTP_PROXY,HTTPS_PROXYและNO_PROXYเพื่อดูว่ามีการตั้งค่าอะไรเพิ่มเติม - รันคำสั่ง curl ทดสอบด้านล่างจากเครื่องเดียวกัน
- จับคู่สาเหตุกับรายการวิธีแก้ด้านล่าง
# 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ฉันจะแก้ไข 'Cannot connect to proxy' อย่างไร?
- ปฏิเสธหรือหมดเวลา: แก้ไขโฮสต์และพอร์ต หรือเปิดรับส่งข้อมูลขาออกไปยังเกตเวย์
- ไม่สามารถแก้ไขชื่อได้: ตรวจสอบ DNS ในเครื่อง; ลองใช้โฮสต์พร้อม
nslookup - 407: แก้ข้อมูลประจำตัวและทำการเข้ารหัส URL ดูที่ 407 Proxy Authentication Required]
- 502 หรือ 504: ลองใหม่กับจุดออกใหม่ ดูที่ 502] และ 504]
- โปรกซีตัวแปรสภาพแวดล้อมที่ไม่ต้องการ: ตั้งค่า
session.trust_env = Falseใน requests หรือทำความสะอาดตัวแปรเหล่านั้น
from urllib.parse import quote
import requests
user = "USERNAME-country-us"
password = "p@ss:word/1" # example containing special characters
# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy} # http:// for both keys
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)ฉันควรลองใหม่หลังจาก 'Cannot connect to proxy' ไหม?
ลองใหม่เฉพาะสาเหตุระดับเครือข่ายที่เปลี่ยนแปลงได้ เช่น หมดเวลา และข้อผิดพลาดเกตเวย์ เช่น 502 หรือ 504 การเชื่อมต่อถูกปฏิเสธ ความล้มเหลวในการแก้ไขชื่อ หรือ 407 จะเกิดขึ้นซ้ำจนกว่าคุณจะเปลี่ยนการตั้งค่า ดังนั้นให้ถือเป็นข้อผิดพลาดร้ายแรงในการจัดการข้อผิดพลาดของคุณ
Cannot connect to proxy (ProxyError) มีผลอย่างไรกับ CrawlRelay?
สำหรับ CrawlRelay URL โปรกซี คือ http://USERNAME:PASSWORD@ ตามด้วยโฮสต์เกตเวย์และพอร์ต HTTP ที่ระบุด้านล่าง สำหรับเป้าหมาย HTTP และ HTTPS ใช้ URL http:// เดียวกันสำหรับทั้งคีย์ http และ https ใน requests: สคีมระบุโปรโตคอลที่สื่อสารกับโปรกซี ไม่ใช่เว็บไซต์
เกตเวย์: gw.crawlrelay.com, พอร์ต 7777 (HTTP, HTTPS ผ่าน CONNECT) และพอร์ต 7778 (SOCKS5). รูปแบบชื่อผู้ใช้: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. ที่เกี่ยวข้อง: SSL: WRONG_VERSION_NUMBER · 407 · คำแนะนำ Python.
Cannot connect to proxy (ProxyError): คำถามที่นักพัฒนาถาม
'Max retries exceeded with url' กับโปรกซีหมายความว่าอย่างไร?
หมายความว่า urllib3 ยอมแพ้หลังจากใช้สิทธิ์ลองใหม่หมดแล้ว และเหตุผลจริงจะตามมาในส่วน 'Caused by' ของข้อความ กับโปรกซี ส่วนนี้มักเป็น ProxyError พร้อมสาเหตุซ้อน เช่น เชื่อมต่อถูกปฏิเสธ หมดเวลา ล้มเหลวในการแก้ชื่อ หรือสถานะอุโมงค์เช่น 407
ทำไม requests ใช้โปรกซีที่ฉันไม่ได้ตั้งค่า?
requests อ่านตัวแปรสภาพแวดล้อม HTTP_PROXY, HTTPS_PROXY และ NO_PROXY โดยดีฟอลต์ และใน Windows ยังอ่านการตั้งค่าโปรกซีระบบด้วย ค่าที่เหลือเดิมจะเขียนทับความคาดหมายของคุณ ตั้งค่า session.trust_env = False หรือส่ง proxies โดยตรงทุกคำขอ
ฉันควรเขียน http:// หรือ https:// หน้าโปรกซีที่อยู่หรือไม่?
เขียน http:// สำหรับโปรกซี HTTP ถึงเว็บจะใช้ HTTPS ก็ตาม สคีมแสดงวิธีที่ไคลเอนต์ของคุณสื่อสารกับโปรกซี การเขียน https:// ทำให้ urllib3 เวอร์ชันใหม่เริ่ม TLS กับโปรกซี ซึ่งล้มเหลวเมื่อใช้พอร์ตโปรกซี HTTP ธรรมดาโดยแสดงข้อผิดพลาด SSL
ข้อผิดพลาดพร็อกซีอื่นๆ ในเอกสารอ้างอิงนี้
รหัสสถานะ 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, ปริมาณข้อมูลที่ไม่หมดอายุ