Jika Requests tersedia di proyek, berikan pemetaan proxy ke pemanggilan:

import requests

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
    timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)

Ganti endpoint loopback dengan proxy Anda yang berjalan atau kandidat dari daftar proxy HTTP yang akan diuji melalui permintaan ini. Kunci menjelaskan skema tujuan: http untuk URL HTTP dan https untuk URL HTTPS. Nilainya menjelaskan listener proxy. Endpoint dapat berbeda jika jaringan memerlukan rute terpisah.

Nilai proxy http:// di bawah kunci https memang disengaja. Requests meminta terowongan CONNECT ke listener HTTP lalu membangun TLS tujuan melaluinya, sesuai kebijakan tujuan dan port proxy. Mengubah nilai ke https:// meminta TLS ke proxy itu sendiri; ini dapat gagal jika listener mengharapkan HTTP tanpa enkripsi.

Arti kedua angka timeout

timeout=(5, 15) menetapkan timeout koneksi dan baca. Ini tidak memberlakukan tenggat total lima belas detik. Data yang datang berkala, beberapa alamat, dan upaya koneksi dapat memperpanjang waktu yang berlalu. Requests tidak memberi timeout umum jika pengaturan ini dihilangkan; pilih batas yang sesuai respons dan tambahkan tenggat pada tingkat aplikasi jika pekerjaan membutuhkan anggaran waktu total yang ketat.

Tangani kegagalan pada tahap terjadinya

try:
    response = requests.get(
        "https://example.com/",
        proxies=proxies,
        timeout=(5, 15),
    )
    response.raise_for_status()
except requests.exceptions.ProxyError as error:
    print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
    print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
    print("HTTP status:", error.response.status_code)

CONNECT yang ditolak dapat memunculkan ProxyError sebelum respons tujuan tersedia. Cabang HTTPError terjadi setelah respons berstatus kesalahan diterima; Timeout berarti batas yang dikonfigurasi telah habis. Periksa rantai pengecualian pembangunan koneksi secara lokal, lalu hapus endpoint berisi kredensial dan URL privat sebelum membagikannya.

Biarkan verifikasi sertifikat aktif. Jika jaringan yang diizinkan memakai CA privat atau intersepsi terkelola, berikan materi kepercayaan yang diharapkan, bukan mematikan verifikasi.

Entri eksplisit per permintaan mengendalikan rute yang diberikan di sini, tetapi skema yang tidak dicantumkan masih dapat dipengaruhi penemuan proxy dari lingkungan. Saat memindahkan panggilan ke Session yang dapat dipakai ulang, tentukan interaksi variabel lingkungan, bawaan Session, dan penggantian per permintaan; penggunaan ulang koneksi dan kebijakan perutean adalah pilihan berbeda.

Artikel terkait