urllib3-д прокси IP ашиглах
HTTP проксид ProxyManager сонгож, urllib3 хариуны талбаруудыг шалган, давтан оролдлого ба тусдаа SOCKS менежерийг тооцоол.
Жижиг urllib3 прокси оношилгоонд давтан оролдлогыг унтраасан ProxyManager ашигла. Ингэснээр ажиллахаа больсон бичлэгийг удаан дахин туршихын оронд эхний оролдлогыг харуулна. uv удирддаг төсөлд:
uv add urllib3Баримт бичгийн төгсгөлийн цэгийг үйлчилгээнийхээ эсвэл HTTP проксийн жагсаалтын HTTP проксигоор сольж, хүсэлтийг тэр менежерээр явуул:
import urllib3
proxy = urllib3.ProxyManager(
"http://203.0.113.10:8080",
timeout=urllib3.Timeout(connect=5, read=10),
retries=False,
)
try:
response = proxy.request("GET", "https://example.com/")
print(response.status)
print(response.data.decode("utf-8", errors="replace")[:200])
finally:
proxy.clear()
Эхлээд response.status уншаад дараа нь response.data шалга. Эдгээр нь urllib3-ийн талбарууд; Requests маягийн status_code ба text тэднийг орлохгүй. Сайтын татгалзсан хариу ажиллаж буй проксигоор ирж болно. Харин хариунаас өмнөх exception нь хүсэлтийг дуусгаж чадаагүйг заана.
retries=False нь оношилгооны сонголт, ашиглалтын давтан оролдлогын бодлого биш. Холболтын 5 секунд, уншилтын 10 секунд тус тусын үеийг хязгаарладаг; нийлээд баталгаатай нийт 15 секундийн хязгаар болохгүй. DNS ба хариуны явц нийт хүлээлтэд нөлөөлж болно.
Жишээ биеийг урьдчилан ачаалж, төгсгөлд менежерийн холболтын сангуудыг цэвэрлэнэ. Ижил цэгээр давтан хүсэлт гаргахдаа холболтыг дахин ашиглахын тулд менежерийг ажил дуустал хадгал. preload_content=False рүү шилжих нь амьдралын мөчлөгийг өөрчилнө: дуудагч урсгал хариуг уншиж, суллах ёстой.
Менежерийг сонсож буй үйлчилгээнд тохируулж сонго. Энгийн PoolManager нь URL өөр газар хадгалсан төдийд прокси ашигладаг болохгүй; SOCKS urllib3.contrib.socks.SOCKSProxyManager ба түүний нэмэлт хамаарлыг ашигладаг. Дээрх код HTTP ProxyManager замыг дагана.