Gunakan IP proxy dengan urllib3
Pilih ProxyManager untuk proxy HTTP, periksa kolom respons urllib3, dan perhitungkan percobaan ulang serta pengelola SOCKS terpisah.
Untuk diagnosis proxy urllib3 sederhana, gunakan ProxyManager dengan percobaan ulang dinonaktifkan. Ini menampilkan upaya pertama alih-alih menghabiskan waktu mengulang entri yang sudah tidak berfungsi. Dalam proyek yang dikelola uv:
uv add urllib3Ganti endpoint dokumentasi dengan proxy HTTP dari layanan Anda atau daftar proxy HTTP dan jalankan permintaan melalui pengelola itu:
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()
Baca response.status dahulu, lalu periksa response.data. Itulah kolom urllib3; status_code dan text ala Requests bukan penggantinya. Penolakan situs bisa tiba melalui proxy yang berfungsi. Sebaliknya, pengecualian sebelum respons menunjukkan permintaan gagal diselesaikan.
retries=False adalah pilihan diagnosis, bukan kebijakan percobaan ulang produksi. Setelan koneksi 5 detik dan baca 10 detik membatasi fase masing-masing; keduanya tidak membentuk batas waktu total 15 detik yang terjamin. DNS dan kemajuan respons dapat memengaruhi waktu tunggu total.
Contoh memuat isi lebih dahulu dan membersihkan kumpulan koneksi pengelola di akhir. Untuk permintaan berulang melalui endpoint sama, pertahankan pengelola hingga pekerjaan selesai agar koneksinya bisa digunakan ulang. Beralih ke preload_content=False mengubah siklus hidup: pemanggil harus membaca dan melepaskan respons streaming.
Pilih pengelola sesuai layanan yang mendengarkan. PoolManager biasa tidak memahami proxy hanya karena URL disimpan di tempat lain; SOCKS memakai urllib3.contrib.socks.SOCKSProxyManager beserta dependensi opsionalnya. Kode di atas mengikuti jalur HTTP ProxyManager.