Untuk diagnosis proksi urllib3 ringkas, gunakan ProxyManager dengan percubaan semula dimatikan. Ini melaporkan percubaan pertama tanpa membuang masa mengulangi entri yang sudah tidak berfungsi. Dalam projek yang diuruskan uv:

uv add urllib3

Gantikan titik akhir dokumentasi dengan proksi HTTP daripada perkhidmatan anda atau senarai proksi HTTP dan jalankan permintaan melalui pengurus 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, kemudian periksa response.data. Itulah medan urllib3; status_code dan text gaya Requests bukan penggantinya. Penolakan laman boleh tiba melalui proksi yang berfungsi. Sebaliknya, pengecualian sebelum respons menunjukkan permintaan gagal diselesaikan.

retries=False ialah pilihan diagnosis, bukan dasar percubaan semula pengeluaran. Tetapan sambungan 5 saat dan bacaan 10 saat mengehadkan fasa masing-masing; ia bukan had keseluruhan 15 saat yang dijamin. DNS dan kemajuan respons boleh mempengaruhi jumlah menunggu.

Contoh memuatkan isi lebih awal dan membersihkan kumpulan sambungan pengurus pada akhir. Bagi permintaan berulang melalui titik akhir sama, kekalkan pengurus hingga kerja selesai agar sambungan boleh digunakan semula. Beralih kepada preload_content=False mengubah kitar hayat: pemanggil perlu membaca dan melepaskan respons penstriman.

Pilih pengurus mengikut perkhidmatan yang mendengar. PoolManager biasa tidak menjadi peka proksi kerana URL disimpan di tempat lain; SOCKS menggunakan urllib3.contrib.socks.SOCKSProxyManager dan kebergantungan pilihannya. Kod di atas mengikuti laluan HTTP ProxyManager.

Artikel berkaitan