Применение выбранного прокси к клиенту TIdHTTP в Delphi
Свяжите выбор из списка Delphi с конфигурацией прокси TIdHTTP, с проверенными значениями конечной точки и явной опцией прямого подключения.
Список может показывать сотню прокси, а TIdHTTP продолжает использовать один и тот же. Выбор строки меняет интерфейс; следующий запрос меняет маршрут только после того, как выбранная конечная точка попадает в конфигурацию HTTP-клиента.
Для публичных HTTP-загрузок записи из списка HTTP-прокси могут дать кандидатов в конечные точки. Храните хост и целочисленный порт за каждой отображаемой записью. Когда выбор принят, примените оба до начала загрузки:
IdHTTP1.ProxyParams.ProxyServer := ChosenHost;
IdHTTP1.ProxyParams.ProxyPort := ChosenPort;
Page := IdHTTP1.Get(TargetURL);
Этот фрагмент предполагает свободный клиент, проверенную конечную точку и существующие переменные приложения. Целевой URL остаётся сайтом. Поле хоста прокси принимает хост, а не URL сайта и не отображаемую метку.
Выбор требует трёх возможных исходов
- Корректный выбор прокси даёт хост и порт от 1 до 65535.
- Явный выбор Direct очищает хост прокси для следующего запроса.
- Некорректный или отсутствующий выбор оставляет текущую конфигурацию нетронутой и просит пользователя исправить её.
Разделение этих исходов не позволяет снятой строке неожиданно отправить следующий запрос напрямую. Отключайте кнопку запроса, пока новый выбор не завершён.
Если конечные точки приходят текстом, разберите и проверьте их, прежде чем менять любое из двух свойств. TryStrToInt позволяет интерфейсу сообщить о неверном порте без неперехваченного исключения преобразования. Разделение по первому двоеточию подходит только для намеренно ограниченного формата имени хоста или IPv4: литерал IPv6 содержит собственные двоеточия. Отдельные поля хоста и порта упрощают хранимое представление.
Не позволяйте клику в интерфейсе изменять клиент, который уже использует рабочий поток. Применяйте выбор между операциями или давайте каждой параллельной операции собственный настроенный клиент. Селектор управляет будущими подключениями; он не может перенести уже установленную передачу на другой выход.