Sorğu session.get() ilə işləyib PreparedRequest kimi yenidən yazıldıqdan sonra sertifikat yoxlamasında uğursuz ola bilər. Aşağı səviyyəli send yolu adi request metodundakı eyni mühit birləşdirməsini etmir.

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)

Nəzərdə tutulan URL dəyişikliklərindən sonra son hazırlanmış URL ilə birləşdirin. Proksi və yan keçmə qərarları təyinatdan asılıdır; əvvəlki URL üçün alınmış parametrlər həqiqətən göndərilən sorğuya uyğun olmaya bilər.

CA parametrini gözdən qaçırmaq asandır

Normal mühit etibarı açıq olduqda, yoxlama açıq şəkildə üstələnməyibsə, birləşdirmə REQUESTS_CA_BUNDLE və onun CURL_CA_BUNDLE ehtiyatını nəzərə alır. send-i standart verify parametri ilə birbaşa çağırmaq bu CA axtarışını etmir. Yoxlamanı söndürmək istənilən sertifikat anbarını vermək əvəzinə fərqi gizlədir.

Session.prepare_request() sessiyanın hazırlama davranışını da tətbiq edir. Sorğunu birbaşa Request.prepare() ilə yaratmaq ayrı seçimdir; sessiya kukilərini və digər sessiya hazırlığını avtomatik tətbiq edəcəyini gözləməyin.

Proksilər üçün daha konkret qayda var

Hər PreparedRequest-in proksi mühit dəyişənlərini nəzərə almadığını demək yanlış olar. Requests 2.34.2-də proxies açar sözü yoxdursa send standart proksiləri müəyyənləşdirir. send-ə proxies={} vermək həmin xüsusi standart müəyyənləşdirmə qolunu ötürür.

merge_environment_settings-ə verilən boş lüğətin rolu başqadır: birləşdirmə send-ə ötürməzdən əvvəl onu uyğun mühit yolları ilə doldura bilər. İki nümunədə yalnız boş lüğətə baxmaq, onu qəbul edən metodların fərqli olduğunu gözdən qaçırır.

Xüsusi sorğu qurma kodunda hazırlama, mühit birləşdirməsi və göndərməni birlikdə saxlayın. Tətbiq qəsdən trust_env=False istifadə edəndə birləşdirmə bu siyasətə əməl edir; mühit parametrlərini onları bilərəkdən söndürmüş müştəriyə məcburi tətbiq etmir.

Əlaqəli məqalələr