คำตอบด่วน
407 Proxy Authentication Required หมายความว่าอย่างไรกับพร็อกซี?
407 Proxy Authentication Required หมายความว่าพร็อกซีปฏิเสธคำร้องของคุณเนื่องจากไม่ได้รับข้อมูลประจำตัวหรือได้ข้อมูลประจำตัวผิด เว็บไซต์เป้าหมายไม่ถูกติดต่อเลย ด้วยพร็อกซีที่อยู่อาศัยของ CrawlRelay ให้ตรวจสอบสามอย่าง: ชื่อผู้ใช้ต้องตรงกับที่แสดงบนแดชบอร์ด รหัสผ่านต้องถูกต้อง และตัวอักษรพิเศษใดๆ ในชื่อผู้ใช้หรือรหัสผ่านต้องเข้ารหัส URL การลองส่งคำร้องเดิมซ้ำๆ จะไม่แก้ปัญหา 407 นี้
407 Proxy Authentication Required แบบสั้นๆ
| ข้อผิดพลาด | 407 Proxy Authentication Required |
|---|---|
| ประเภท | รหัสสถานะ HTTP (4xx, ข้อผิดพลาดของไคลเอนต์) |
| ส่งโดย | พร็อกซีเกตเวย์ ไม่ใช่เว็บไซต์เป้าหมาย |
| กำหนดไว้ใน | RFC 9110, section 15.5.8 (headers: Proxy-Authenticate 11.7.1, Proxy-Authorization 11.7.2) |
| ลองใหม่อีกครั้งไหม? | ไม่ ได้รับการยืนยันข้อมูลประจำตัวเดิมล้มเหลวอีกครั้ง แก้ไขข้อมูลเหล่านั้นก่อน |
| ตรวจสอบก่อน | รันการทดสอบ curl ด้านล่างโดยใช้ชื่อผู้ใช้งานเปล่าๆ และไม่มีพารามิเตอร์กำหนดเป้าหมาย |
407 Proxy Authentication Required หมายความว่าอย่างไร?
รหัส 407 มาจากพร็อกซี ไม่ใช่จากเว็บไซต์ที่คุณต้องการเข้าถึง RFC 9110 อธิบายว่าเป็นเวอร์ชันของพร็อกซีที่เหมือนกับ 401: ไคลเอนต์ต้องยืนยันตัวตนกับพร็อกซี ก่อนที่อะไรอื่นจะเกิดขึ้น พร็อกซีจะส่งหัวข้อ Proxy-Authenticate ที่ระบุแบบแผนที่ยอมรับ ซึ่งเกือบจะเป็น Basic เสมอ ลูกค้าของคุณจะตอบกลับด้วยหัวข้อ Proxy-Authorization ที่บรรจุ username:password ซึ่งเข้ารหัส Base64
สำหรับเป้าหมาย HTTPS รหัส 407 จะมาทันทีที่ตอบกลับคำร้อง CONNECT เพื่อเปิดอุโมงค์ นั่นจึงเป็นเหตุผลที่ไลบรารีหลายตัวรายงานเป็นปัญหาอุโมงค์หรือปัญหาการเชื่อมต่อ แทนที่จะเป็นรหัสสถานะ HTTP: เซสชัน TLS กับเว็บไซต์ไม่เคยเริ่มต้นเลย
a 407 เป็นอย่างไรใน Python, curl, Node.js และเบราว์เซอร์?
ข้อผิดพลาดเดียวกันนี้แสดงผลแตกต่างกันในแต่ละเครื่องมือ นี่คือข้อความที่ต้องค้นหาในบันทึกของคุณ:
- Python requests:
ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required')) - curl:
curl: (56) CONNECT tunnel failed, response 407 - Scrapy:
TunnelError: Could not open CONNECT tunnel with proxy ... [{'status': 407, 'reason': b'Proxy Authentication Required'}] - Chrome, Playwright, Puppeteer:
net::ERR_TUNNEL_CONNECTION_FAILEDหรือป๊อปอัพเข้าสู่ระบบในเบราว์เซอร์ที่มองเห็นได้ - ไคลเอนต์ Node.js บนเป้าหมาย http://:
Request failed with status code 407
อะไรเป็นสาเหตุของ a 407?
โอกาสสูงสุดอันดับแรก:
- ชื่อผู้ใช้หรือรหัสผ่านผิด. พิมพ์ผิด ใช้รหัสผ่านเก่าหลังรีเซ็ต หรือข้อมูลประจำตัวของผู้ใช้ย่อยคนอื่น
- ตัวอักษรพิเศษไม่ถูกเข้ารหัส. รหัสผ่านที่มี
@,:,/หรือ#ทำให้ URLuser:pass@hostเสีย ต้องเข้ารหัสเปอร์เซ็นต์ เช่น@กลายเป็น%40,:กลายเป็น%3A - ส่วนต่อท้ายกำหนดเป้าหมายเสียหาย. เกตเวย์ที่อ่านการกำหนดเป้าหมายจากชื่อผู้ใช้จะเห็นชื่อผู้ใช้ยาวๆ ตัวอักษรผิดพลาดในคีย์หรือรหัสประเทศจะทำให้เป็นชื่อผู้ใช้ที่พร็อกซีไม่รู้จัก
- ข้อมูลประจำตัวที่ไม่ถูกส่งออกจากโค้ดคุณ. Chrome จะละเว้นชื่อผู้ใช้และรหัสผ่านที่เขียนใน
--proxy-serverPuppeteer ต้องมีpage.authenticate()และ Selenium ต้องใช้ตัวส่งต่อภายในเครื่อง - ยอดเงินว่างเปล่า. ตรวจสอบว่าบัญชียังมีทราฟฟิกเหลือก่อนดีบักโค้ด
ฉันวินิจฉัย a 407 ทีละขั้นตอนอย่างไร?
- ทดสอบข้อมูลประจำตัวกับ curl โดยไม่มีการกำหนดเป้าหมายเลย (คำสั่งด้านล่าง) บรรทัด
HTTP/1.1 407ในผลลัพธ์ verbose ยืนยันปัญหาข้อมูลประจำตัว - เพิ่มพารามิเตอร์กำหนดเป้าหมายกลับเข้าไปทีละตัว พร้อมทดสอบใหม่ทุกครั้ง
- บันทึก URL พร็อกซีที่โปรแกรมของคุณสร้างจริง พร้อมปิดบังรหัสผ่าน และเปรียบเทียบกับแดชบอร์ดทีละตัวอักษร
- ถ้า 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ฉันจะแก้ไข a 407 อย่างไร?
- เข้ารหัสข้อมูลประจำตัว ด้วย
urllib.parse.quote(value, safe='')ใน Python หรือencodeURIComponent()ใน JavaScript ก่อนสร้าง URL - เบราว์เซอร์: ส่ง
usernameและpasswordในตัวเลือกproxyของ Playwright เรียกใช้page.authenticate()ใน Puppeteer และใช้ตัวส่งต่อในเครื่องสำหรับ Selenium ดูคำแนะนำ Playwright และ Puppeteer - ตัวแปรแวดล้อม: หากกำหนด
HTTPS_PROXYให้ใส่ค่าในเครื่องหมายคำพูดทั้งหมดในเชลล์เพื่อให้@และ$คงอยู่ - หมุนรหัสผ่าน ในแดชบอร์ดถ้าคิดว่ารั่ว จากนั้นอัปเดตทุก scraper ที่ใช้
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)from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://gw.crawlrelay.com:7777",
"username": "USERNAME-country-us",
"password": "PASSWORD",
})
page = browser.new_page()
response = page.goto("https://api.ipify.org")
print(response.status, page.inner_text("body"))
browser.close()ฉันควรลองใหม่หลังจาก a 407 ไหม?
อย่าลองซ้ำ 407 อัตโนมัติ การลองซ้ำด้วยข้อมูลประจำตัวเดิมจะได้คำตอบเดิม และการลองซ้ำถี่ๆ จะทำให้บันทึกของคุณเต็ม ให้ถือ 407 เป็นข้อผิดพลาดการตั้งค่า: หยุดงาน แก้ไขข้อมูลประจำตัว และเริ่มใหม่ ถ้า 407 ปรากฏขึ้นทันทีในงานที่ใช้งานได้มาหลายวัน แสดงว่ารหัสผ่านอาจถูกเปลี่ยนหรือผู้ใช้ย่อยถูกปิดใช้งาน
407 Proxy Authentication Required มีผลอย่างไรกับ CrawlRelay?
เกตเวย์ CrawlRelay อ่านชื่อผู้ใช้และรหัสผ่านในทุกการเชื่อมต่อใหม่ การกำหนดเป้าหมายและการตั้งค่าเซสชันอยู่ในชื่อผู้ใช้ ดังนั้นรหัสผ่านที่ถูกต้องอาจล้มเหลวเมื่อส่วนต่อท้ายเสียหาย สร้างชื่อผู้ใช้ในฟังก์ชันช่วยเหลือเดียวและบันทึกผลลัพธ์เมื่อเริ่มต้น ดู หน้าคู่มือเริ่มต้นอย่างรวดเร็ว ที่แสดงรูปแบบที่ถูกต้อง
เกตเวย์: gw.crawlrelay.com, พอร์ต 7777 (HTTP, HTTPS ผ่าน CONNECT) และพอร์ต 7778 (SOCKS5). รูปแบบชื่อผู้ใช้: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. ที่เกี่ยวข้อง: 401 กับ 407 · ERR_TUNNEL_CONNECTION_FAILED · ไม่สามารถเชื่อมต่อกับพร็อกซี.
407 Proxy Authentication Required: คำถามที่นักพัฒนาถาม
407 ถูกส่งโดยเว็บไซต์ที่ฉันกำลังขูดข้อมูลหรือไม่?
ไม่ 407 จะถูกส่งโดยพร็อกซีที่อยู่ระหว่างคุณกับเว็บไซต์ คำร้องไม่เคยถึงเว็บไซต์ จึงไม่สามารถเห็นนับ หรือบล็อกทราฟฟิกของคุณได้ ถ้าเว็บไซต์ต้องการล็อกอิน จะตอบ 401 แทน แก้ไขข้อมูลประจำตัวพร็อกซีเพื่อให้ 407 หายไป
ทำไมโค้ดของฉันถึงได้รับ 407 เมื่อ curl ใช้พร็อกซีเดียวกันได้?
ไลบรารีของคุณไม่ส่งข้อมูลประจำตัว หรือส่งในรูปแบบต่างกัน สาเหตุทั่วไปคือข้อมูลประจำตัวถูกพิมพ์ในธงเบราว์เซอร์ที่ละเว้นมัน ตัวแปรแวดล้อมสูญเสียตัวอักษรพิเศษ หรือรหัสผ่านไม่ถูกเข้ารหัส URL แสดง URL พร็อกซีที่โค้ดคุณสร้าง พร้อมปิดบังรหัสผ่าน และเปรียบเทียบกับคำสั่ง curl
407 ใช้ทราฟฟิกจากแผนของฉันหรือไม่?
คำตอบ 407 มีขนาดไม่กี่ร้อยไบต์ และคำร้องไม่เคยถึงเป้าหมาย จึงไม่มีการดาวน์โหลดหน้าเว็บ ค่าใช้จ่ายอยู่ที่อื่น: scraper ที่ติดอยู่ในลูปลอง 407 จะเสียเวลาและเติมบันทึกของคุณ ทำให้ 407 เป็นจุดหยุดหนักในการจัดการข้อผิดพลาด
ข้อผิดพลาดพร็อกซีอื่นๆ ในเอกสารอ้างอิงนี้
รหัสสถานะ 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, ปริมาณข้อมูลที่ไม่หมดอายุ