libproxy выбирает маршрут; соединение устанавливает ваш клиент
Используйте результаты libproxy как кандидатов маршрутизации для каждого URL, а не ждите, что обнаружение перенаправит сокеты приложения.
Если libproxy возвращает URI прокси, а следующий сокет подключается напрямую, проверьте передачу. libproxy обнаруживает политику; он не перехватывает каждый сокет, который открывает приложение.
- Запросите ресурс. В документированном C API libproxy 0.5 создайте фабрику прокси и запросите фактический URL назначения.
- Истолкуйте упорядоченных кандидатов. Результаты HTTP, SOCKS и прямые требуют разной обработки. Сохраняйте их порядок предпочтения и предполагаемую политику отказов.
- Настройте потребителя. Передайте выбранный тип прокси, конечную точку и порядок аутентификации транспорту, который их поддерживает. Необработанный сокет TCP не получает согласование CONNECT или SOCKS из возвращённого URI.
Не сохраняйте один ответ как маршрут для всех назначений и не делайте прямое маршрутизирование постоянным только потому, что первый прокси однажды отказал.
Если HTTP-клиент уже интегрирует системный прокси или обнаружение PAC, выберите одного владельца выбора. Два независимых селектора плюс ещё одна обёртка могут дать маршрут, которого не предполагала ни одна из политик.
В нативном коде следуйте жизненному циклу фабрики и памяти результатов установленного API. Повторное использование фабрики может сохранить полезное состояние обнаружения, но по-прежнему требует запроса для каждого назначения. Записывайте выбор отдельно от результата соединения: возвращённый URI не доказывает успешную аутентификацию, разрешение имени или дальнейший доступ.