Список может показывать сотню прокси, а TIdHTTP продолжает использовать один и тот же. Выбор строки меняет интерфейс; следующий запрос меняет маршрут только после того, как выбранная конечная точка попадает в конфигурацию HTTP-клиента.

Для публичных HTTP-загрузок записи из списка HTTP-прокси могут дать кандидатов в конечные точки. Храните хост и целочисленный порт за каждой отображаемой записью. Когда выбор принят, примените оба до начала загрузки:

IdHTTP1.ProxyParams.ProxyServer := ChosenHost;
IdHTTP1.ProxyParams.ProxyPort := ChosenPort;
Page := IdHTTP1.Get(TargetURL);

Этот фрагмент предполагает свободный клиент, проверенную конечную точку и существующие переменные приложения. Целевой URL остаётся сайтом. Поле хоста прокси принимает хост, а не URL сайта и не отображаемую метку.

Выбор требует трёх возможных исходов

  • Корректный выбор прокси даёт хост и порт от 1 до 65535.
  • Явный выбор Direct очищает хост прокси для следующего запроса.
  • Некорректный или отсутствующий выбор оставляет текущую конфигурацию нетронутой и просит пользователя исправить её.

Разделение этих исходов не позволяет снятой строке неожиданно отправить следующий запрос напрямую. Отключайте кнопку запроса, пока новый выбор не завершён.

Если конечные точки приходят текстом, разберите и проверьте их, прежде чем менять любое из двух свойств. TryStrToInt позволяет интерфейсу сообщить о неверном порте без неперехваченного исключения преобразования. Разделение по первому двоеточию подходит только для намеренно ограниченного формата имени хоста или IPv4: литерал IPv6 содержит собственные двоеточия. Отдельные поля хоста и порта упрощают хранимое представление.

Не позволяйте клику в интерфейсе изменять клиент, который уже использует рабочий поток. Применяйте выбор между операциями или давайте каждой параллельной операции собственный настроенный клиент. Селектор управляет будущими подключениями; он не может перенести уже установленную передачу на другой выход.

Похожие статьи