Ако session.proxies сочи към една крайна точка, но скриптът използва проксито на обвивката, повторното присвояване на същия речник няма да реши конфликта. Requests може да слива прокси настройки от средата с приоритет над стандартните на Session. Изберете дали Session да продължи да открива настройки от средата.

Запазете откриването от средата, подавайте маршрути в заявката

Подавайте изрични стойности на отделното извикване, както Requests препоръчва за избягване на този конфликт между Session и средата:

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()

Заменете локалния слушател със своя. Ако сравнявате публични HTTP крайни точки, избирайте кандидати от списъка с HTTP проксита, без да променяте политиката на Session. Това управлява подадените записи в съпоставянето; направете съзнателен избор и за другите схеми или хостове на приложението. Услуга, IDE, контейнер или изпълнител на CI може да наследи различна среда от терминала.

Нека Session управлява собствените си настройки

Ако приложението не трябва да открива проксита от средата, задайте политиката преди първата заявка:

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 влияе и на свързаната със средата конфигурация на сертификати и автоматичното удостоверяване netrc. Отчетете тези зависимости, преди да го изберете. За одобрен частен пакет CA сертификати можете да подадете изричен път:

response = session.get(
    "https://example.com/",
    timeout=(5, 15),
    verify="/path/to/approved-ca-bundle.pem",
)

Използвайте действително одобрения пакет и оставете проверката включена. Дръжте отделна Session за всяка политика на маршрутизация, вместо да променяте една, докато други задачи я използват.

Ако никой вариант не обяснява маршрута на приложението, сравнете изолирана Session с приложението в същата среда за изпълнение и с безобидна цел. Запишете наличните прокси променливи, стойността на trust_env и дали извикването подава proxies; изключете URL адресите с идентификационни данни от споделените журнали. Изолиран успех насочва следващата проверка към създаване на Session, адаптери, потоци с подготвени заявки или собствени транспорти. Тест на средата с curl не определя собственото поведение на Requests при сливане.

Подобни статии