Permintaan bisa berfungsi melalui session.get() lalu gagal dalam verifikasi sertifikat setelah ditulis ulang sebagai PreparedRequest. Jalur send tingkat rendah tidak menjalankan penggabungan lingkungan yang sama dengan metode request normal.

import requests

with requests.Session() as session:
    request = requests.Request("GET", "https://example.com/")
    prepared = session.prepare_request(request)

    settings = session.merge_environment_settings(
        prepared.url, {}, None, None, None
    )
    response = session.send(
        prepared,
        timeout=(5, 15),
        **settings,
    )
    response.raise_for_status()
    print(response.status_code)

Gabungkan dengan URL akhir yang telah disiapkan, setelah perubahan URL yang diinginkan. Keputusan proxy dan bypass bergantung pada tujuan, sehingga setelan untuk URL sebelumnya bisa salah bagi permintaan yang benar-benar dikirim.

Setelan CA mudah terlewat

Dengan kepercayaan lingkungan normal aktif, penggabungan mempertimbangkan REQUESTS_CA_BUNDLE dan cadangannya CURL_CA_BUNDLE saat verifikasi tidak ditimpa secara eksplisit. Memanggil send langsung dengan verify bawaan tidak melakukan pencarian CA itu. Mematikan verifikasi menyembunyikan perbedaan alih-alih menyediakan penyimpanan sertifikat yang dimaksud.

Session.prepare_request() juga menerapkan perilaku persiapan sesi. Membuat permintaan langsung dengan Request.prepare() adalah pilihan terpisah; jangan mengharapkan cookie sesi atau persiapan sesi lain diterapkan otomatis.

Proxy memiliki aturan lebih khusus

Tidak tepat mengatakan setiap PreparedRequest mengabaikan variabel lingkungan proxy. Dalam Requests 2.34.2, send menentukan proxy bawaan ketika argumen kata kunci proxies tidak ada. Memberikan proxies={} ke send melewati cabang penentuan bawaan tersebut.

Dictionary kosong yang diberikan ke merge_environment_settings punya peran berbeda: penggabungan bisa mengisinya dengan rute lingkungan yang berlaku sebelum diteruskan ke send. Hanya melihat dictionary kosong di dua cuplikan mengabaikan metode berbeda yang menerimanya.

Dalam kode pembangun permintaan khusus, pertahankan persiapan, penggabungan lingkungan, dan pengiriman bersama. Saat aplikasi sengaja menggunakan trust_env=False, penggabungan menghormati kebijakan itu; tidak memaksakan setelan lingkungan kepada klien yang sengaja menonaktifkannya.

Artikel terkait