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 оларды алмастырмайды. Сайттың қабылдамауы жұмыс істейтін прокси арқылы келуі мүмкін. Ал жауапқа дейінгі ерекшелік сұрау аяқталмағанын көрсетеді.
retries=False — диагностикалық таңдау, жұмыс ортасына арналған қайталау саясаты емес. Қосылудың 5 секунды мен оқудың 10 секунды өз кезеңдерін шектейді; олар кепілді жалпы 15 секундтық мерзім құрмайды. DNS пен жауаптың жүру барысы жалпы күтуге әсер етуі мүмкін.
Мысал денені алдын ала жүктеп, соңында менеджердің қосылым қорларын тазалайды. Сол нүкте арқылы қайталанатын сұраулар үшін менеджерді жұмыс біткенше сақтаңыз, сонда қосылымдар қайта қолданылады. preload_content=False режиміне көшу өмірлік циклді өзгертеді: шақырушы ағындық жауапты оқып, босатуы керек.
Менеджерді тыңдаушы қызметке сай таңдаңыз. Қалыпты PoolManager URL басқа жерде сақталғандықтан прокси қолданатын болмайды; SOCKS urllib3.contrib.socks.SOCKSProxyManager және оның қосымша тәуелділіктерін пайдаланады. Жоғарыдағы код HTTP ProxyManager жолымен жүреді.