Proxy Session Python Requests dan prioritas lingkungan
Buat perutean Python Requests dapat diprediksi saat session.proxies, variabel lingkungan, setelan per permintaan, dan trust_env berinteraksi.
Jika session.proxies menunjuk satu endpoint tetapi skrip memakai proxy shell, menetapkan ulang kamus yang sama tidak menyelesaikan konflik. Requests dapat menggabungkan setelan proxy lingkungan dengan prioritas di atas default Session. Pilih apakah Session harus terus menemukan setelan dari lingkungan.
Pertahankan penemuan lingkungan, berikan rute pada permintaan
Berikan nilai eksplisit pada masing-masing pemanggilan, sesuai rekomendasi Requests untuk menghindari konflik Session dan lingkungan ini:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
Ganti listener lokal dengan milik Anda. Jika membandingkan endpoint HTTP publik, ambil kandidat dari daftar proxy HTTP sambil mempertahankan kebijakan Session. Ini mengontrol entri pemetaan yang diberikan; tentukan juga pilihan untuk skema atau host lain yang dipakai aplikasi. Layanan, IDE, kontainer, atau runner CI dapat mewarisi lingkungan berbeda dari terminal.
Biarkan Session mengendalikan setelannya sendiri
Jika aplikasi tidak boleh menemukan proxy dari lingkungannya, tetapkan kebijakan sebelum permintaan pertama:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False juga memengaruhi konfigurasi sertifikat terkait lingkungan dan autentikasi netrc otomatis. Pertimbangkan ketergantungan itu sebelum memilihnya. Untuk bundel CA privat yang disetujui, Anda dapat memberikan jalur eksplisit:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Gunakan bundel yang benar-benar disetujui dan biarkan verifikasi aktif. Pertahankan Session terpisah untuk setiap kebijakan perutean, alih-alih mengubah satu Session saat pekerjaan lain memakainya.
Jika kedua pilihan tidak menjelaskan rute aplikasi, bandingkan Session terisolasi dengan aplikasi menggunakan runtime dan tujuan tidak berbahaya yang sama. Catat variabel proxy yang ada, nilai trust_env, dan apakah pemanggilan memberikan proxies; jangan sertakan URL berkredensial dalam log bersama. Keberhasilan terisolasi mengarahkan pemeriksaan berikutnya ke pembuatan Session, adapter, alur permintaan yang disiapkan, atau transport khusus. Pengujian lingkungan curl tidak menetapkan perilaku penggabungan Requests sendiri.