リストボックスには百個のプロキシを表示できても、TIdHTTP は同じ一つを使い続けます。行を選択すると画面は変わりますが、次のリクエストの経路が変わるのは、選択したエンドポイントが HTTP クライアントの設定に届いてからです。

公開 HTTP ダウンロードでは、HTTP プロキシリストの項目が候補エンドポイントになります。表示される各項目の背後にホストと整数のポートを保持してください。選択が確定したら、ダウンロードを開始する前に両方を適用します:

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

この断片は、待機中のクライアント、検証済みのエンドポイント、アプリケーションの既存変数を前提としています。対象 URL はあくまで Web サイトです。プロキシのホスト欄にはホストを入れ、Web サイトの URL や表示ラベルを入れてはいけません。

選択には三つの結果が必要です

  • 有効なプロキシ選択は、ホストと 1 から 65535 までのポートを提供します。
  • 明示的な直接接続の選択は、次のリクエストのためにプロキシホストを空にします。
  • 無効または未選択の場合は現在の設定をそのまま残し、ユーザーに修正を求めます。

これらの結果を区別しておけば、選択を外した行が次のリクエストを突然直接送信することを防げます。新しい選択が完了するまでリクエストボタンは無効にしてください。

エンドポイントがテキストで届く場合は、どちらのプロパティを変更する前にも解析と検証を行います。TryStrToInt を使えば、未処理の変換例外を出さずに不正なポートを画面に報告できます。最初のコロンで分割する方法は、意図的に制限したホスト名または IPv4 形式にのみ適しています:IPv6 リテラルは独自のコロンを含みます。ホスト欄とポート欄を分けておくと、保存する表現が単純になります。

UI のクリックで、ワーカーがすでに使用中のクライアントを変更してはいけません。選択は操作と操作の間に適用するか、並行する操作ごとに専用の設定済みクライアントを与えてください。選択器が制御するのは今後の接続であり、確立済みの転送を別の出口へ移すことはできません。

関連記事