วิธีใช้พร็อกซีใน Python Requests (HTTP/HTTPS และการรวม Session Pooling)
อัปเดตเมื่อ:
ไลบรารี requests ใน Python รองรับพร็อกซี VinaProxy ที่ต้องยืนยันตัวตนผ่านดิกชันนารี proxies โดยแมปทั้งคีย์ 'http' และ 'https' เข้ากับ http://user:pass@ip:port การผูกดิกชันนารีนี้เข้ากับ requests.Session() จะช่วยนำซ็อกเก็ต TCP เดิมกลับมาใช้ซ้ำ ทำให้การทำ Web Scraping ทำได้รวดเร็วและใช้ทรัพยากรน้อยลงอย่างมาก
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
การจัดรูปแบบดิกชันนารี proxies และการใช้ Session ซ้ำ
การเรียก requests.get() แยกเดี่ยวในทุกๆ URL จะสร้างการเชื่อมต่อ TCP และขั้นตอนจับมือ TLS ใหม่ทุกครั้ง การผูกพร็อกซีเข้ากับ session = requests.Session() จะช่วยรักษาทันเนลของพร็อกซีให้เปิดค้างไว้สำหรับการส่งคำขออย่างต่อเนื่อง
| พารามิเตอร์ Requests | รูปแบบไวยากรณ์ที่แนะนำ | ประโยชน์ทางเทคนิค |
|---|---|---|
คีย์ 'http' | 'http://user:pass@ip:port' | ส่งผ่านคำขอเว็บแบบ HTTP ปกติผ่านพร็อกซี |
คีย์ 'https' | 'http://user:pass@ip:port' | ใช้โครงสร้าง http:// เพื่อให้ urllib3 เปิดทันเนล HTTP CONNECT สำหรับ TLS |
ทูเพิล timeout | timeout=(5, 15) | กำหนดเชื่อมต่อ 5 วินาทีและอ่านข้อมูล 15 วินาที ป้องกันเธรดทำงานค้าง |
| การสลับ IP ในพูล | itertools.cycle(proxy_list) | หมุนเวียนการส่งคำขออย่างสม่ำเสมอไปทั่วทั้งพูล IP นิ่งของคุณ |
การหลีกเลี่ยงข้อผิดพลาดทั่วไปของ urllib3 และ ProxyError
- ให้ใช้
http://(ไม่ใช่https://) เป็นรูปแบบ URL สคีมสำหรับทั้งคีย์'http'และ'https'เสมอ เว้นแต่พอร์ตพร็อกซีของคุณจะกำหนดให้ใช้ TLS-over-TLS โดยเฉพาะ - หากรหัสผ่านมีอักขระพิเศษ ให้เข้ารหัสด้วย
urllib.parse.quote(password, safe='') - ข้อผิดพลาด
407 Proxy Authentication Requiredหมายถึงชื่อผู้ใช้หรือรหัสผ่านในสตริง URL ไม่ตรงกับข้อมูลในแดชบอร์ด - สามารถนำตรรกะนี้ไปใช้งานได้เหมือนกันใน
httpx.Client(proxy='http://user:pass@ip:port')และaiohttpผ่านsession.get(url, proxy=...)
ขั้นตอนทีละขั้น
- 1
แปลง ip:port:user:pass ให้เป็นรูปแบบ URL
ใช้เครื่องมือแปลงรูปแบบพร็อกซีของเราเพื่อเปลี่ยนรายการ VinaProxy ให้เป็นสตริง
http://user:pass@ip:port - 2
กำหนดค่าดิกชันนารี proxies
สร้างตัวแปร
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}ในสคริปต์ Python - 3
ผูกเข้ากับออบเจกต์ requests.Session()
เริ่มต้น
s = requests.Session()แล้วเรียกs.proxies.update(proxies)เพื่อเปิดใช้งานพูลKeep-Alive - 4
ทดสอบคำขอเพื่อยืนยัน IP ขาออก
รันคำสั่ง
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json())เพื่อตรวจสอบความถูกต้องของ IP พร็อกซี
คำถามที่พบบ่อย
ทำไมคีย์ 'https' ถึงยังคงใช้ 'http://user:pass@ip:port'?
คำนำหน้า http:// มีไว้เพื่อบอก urllib3 ถึงโปรโตคอลในการเชื่อมต่อไปยังเซิร์ฟเวอร์พร็อกซี (โดยใช้ HTTP CONNECT) ในขณะที่ข้อมูลทั้งหมดที่ส่งต่อไปยังเว็บไซต์ปลายทาง https:// ยังคงถูกเข้ารหัสด้วย TLS อย่างสมบูรณ์
จะหมุนเวียนใช้งานพร็อกซีสถิต 25 ตัวในการส่งคำขอใน Python ได้อย่างไร?
โหลด URL พร็อกซีทั้ง 25 ตัวลงใน pool = itertools.cycle(PROXIES) แล้วส่งค่า proxies={'http': p, 'https': p} ในแต่ละคำขอพร้อมจำกัดความถี่การส่งคำขอต่อ IP อย่างเหมาะสม
VinaProxy มีการจำกัดหรือคิดเงินค่าแบนด์วิดท์ของสคริปต์ Python หรือไม่?
ไม่มี แพ็กเกจ IPv4 ส่วนตัวและ Static ISP ทั้งหมดมาพร้อมกับปริมาณการใช้งานไม่จำกัดต่อเดือน
สร้างพูลพร็อกซี Python สำหรับงานสแครปปิ้งแบบไม่จำกัดแบนด์วิดท์
พร็อกซี IPv4 ส่วนตัวและ Static ISP พร้อมใช้งานทันทีใน 7 ประเทศ
ซื้อพร็อกซีสำหรับ Python