ໃຊ້ IP ພຣັອກຊີກັບ urllib3
ເລືອກ ProxyManager ສຳລັບ HTTP ພຣັອກຊີ, ກວດຊ່ອງຄຳຕອບ 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; status_code ແລະ text ແບບ Requests ບໍ່ແມ່ນຕົວແທນ. ການປະຕິເສດເວັບໄຊອາດມາຜ່ານພຣັອກຊີທີ່ໃຊ້ໄດ້. ຂໍ້ຍົກເວັ້ນກ່ອນຄຳຕອບກັບຊີ້ວ່າຄຳຂໍບໍ່ສຳເລັດ.
retries=False ເປັນທາງເລືອກກວດຫາບັນຫາ ບໍ່ແມ່ນນະໂຍບາຍລອງໃໝ່ສຳລັບໃຊ້ງານຈິງ. ການຕັ້ງເຊື່ອມຕໍ່ 5 ວິນາທີ ແລະ ອ່ານ 10 ວິນາທີຈຳກັດແຕ່ລະຂັ້ນ ບໍ່ໄດ້ລວມເປັນຂີດຈຳກັດເວລາ 15 ວິນາທີທີ່ຮັບປະກັນ. DNS ແລະ ຄວາມຄືບໜ້າຂອງຄຳຕອບອາດກະທົບເວລາລໍຖ້າລວມ.
ຕົວຢ່າງໂຫຼດເນື້ອຫາລ່ວງໜ້າ ແລະ ລ້າງກຸ່ມການເຊື່ອມຕໍ່ຂອງຕົວຈັດການໃນຕອນຈົບ. ສຳລັບຄຳຂໍຊ້ຳຜ່ານຈຸດປາຍດຽວກັນ ຮັກສາຕົວຈັດການຈົນວຽກສຳເລັດເພື່ອໃຊ້ການເຊື່ອມຕໍ່ຊ້ຳ. ປ່ຽນໄປ preload_content=False ຈະປ່ຽນວົງຈອນ: ຜູ້ເອີ້ນຕ້ອງອ່ານ ແລະ ປ່ອຍຄຳຕອບແບບສະຕຣີມ.
ເລືອກຕົວຈັດການໃຫ້ກົງກັບບໍລິການທີ່ຟັງ. PoolManager ທົ່ວໄປບໍ່ໄດ້ຮູ້ຈັກພຣັອກຊີເພາະມີ URL ເກັບຢູ່ບ່ອນອື່ນ; SOCKS ໃຊ້ urllib3.contrib.socks.SOCKSProxyManager ແລະ ສ່ວນເພິ່ງພາທາງເລືອກ. ໂຄດຂ້າງເທິງໃຊ້ເສັ້ນທາງ HTTP ProxyManager.