Bir istek session.get() ile çalışıp PreparedRequest olarak yeniden yazıldıktan sonra sertifika doğrulamasında başarısız olabilir. Düşük seviyeli send yolu normal request yöntemiyle aynı ortam birleştirmesini çalıştırmaz.

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)

Amaçlanan URL değişikliklerinden sonra son hazırlanmış URL ile birleştirin. Proxy ve atlama kararları hedefe bağlıdır; önceki URL için alınan ayarlar gerçekten gönderdiğiniz istek için yanlış olabilir.

CA ayarı kolayca gözden kaçar

Normal ortam güveni açıkken, doğrulama açıkça geçersiz kılınmamışsa birleştirme REQUESTS_CA_BUNDLE ve yedeği CURL_CA_BUNDLE değerlerini dikkate alır. send’i varsayılan verify ile doğrudan çağırmak bu CA aramasını yapmaz. Doğrulamayı kapatmak amaçlanan sertifika deposunu sağlamak yerine farkı gizler.

Session.prepare_request() oturumun hazırlık davranışını da uygular. İsteği doğrudan Request.prepare() ile oluşturmak ayrı tercihtir; oturum çerezlerini veya diğer oturum hazırlığını otomatik uygulamasını beklemeyin.

Proxy’lerin daha özel bir kuralı vardır

Her PreparedRequest’in proxy ortam değişkenlerini yok saydığını söylemek yanlış olur. Requests 2.34.2’de proxies anahtar sözcük argümanı yoksa send varsayılan proxy’leri çözümler. send’e proxies={} vermek o özel varsayılan çözümleme dalını atlar.

merge_environment_settings’e verilen boş sözlüğün rolü farklıdır: birleştirme send’e iletilmeden önce onu geçerli ortam yollarıyla doldurabilir. İki parçada yalnız boş sözlüğe bakmak onu alan yöntemlerin farklı olduğunu gözden kaçırır.

Özel istek kurma kodunda hazırlığı, ortam birleştirmesini ve göndermeyi bir arada tutun. Uygulama bilerek trust_env=False kullanıyorsa birleştirme o politikaya uyar; ortamı bilerek kapatan istemciye ayarları zorla taşımaz.

İlgili makaleler