Помилка ConfigParser DuplicateOptionError з HTTP_PROXY і http_proxy
Зрозумійте, чому HTTP_PROXY і http_proxy можуть співіснувати в Linux, але все ж спричиняють DuplicateOptionError, коли використовуються як типові значення ConfigParser.
У середовищі, що розрізняє регістр, HTTP_PROXY і http_proxy можуть бути різними іменами. ConfigParser зазвичай зводить імена параметрів до нижнього регістру, тому передавання обох у типові значення може об'єднати їх в один дубльований параметр.
Тому помилка з іменем <dict> може виникати з ConfigParser(defaults=os.environ) ще до спроби будь-якого з'єднання через проксі.
Якщо програмі навмисно потрібні регістрозалежні імена середовища в цьому парсері, задайте політику нормалізації перед їх завантаженням:
import configparser
import os
settings = configparser.ConfigParser(interpolation=None)
settings.optionxform = str
settings.read_dict({'DEFAULT': dict(os.environ)})Так обидва написання залишаються окремими. Пошук і будь-яка конфігурація, прочитана згодом, тепер також дотримуються цієї політики. Вимкнення інтерполяції також не дозволяє трактувати знаки відсотка в значеннях середовища як синтаксис інтерполяції.
Якщо програмі потрібна конфігурація без урахування регістру, явно виберіть потрібні змінні середовища та розв'яжіть суперечливі написання за правилами проксі цього клієнта, перш ніж передавати їх парсеру.
Зміна strict=False приймає дублікати, але не визначає, яке з суперечливих значень проксі має використовувати програма. Вилучення однієї випадкової змінної середовища може бути доречним, якщо ви не контролюєте парсер; спершу з'ясуйте, яке значення потрібне клієнту нижче в ланцюжку.