列表框可以显示上百个代理,而 TIdHTTP 仍然使用同一个。选中一行只会改变界面;只有当所选端点进入 HTTP 客户端的配置后,下一次请求才会改变线路。

对于公开的 HTTP 下载,HTTP 代理列表中的条目可以提供候选端点。每个显示的条目背后都要保存主机和整数端口。接受选择后,在开始下载之前同时应用两者:

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

这段代码假定客户端空闲、端点已经过验证,并且使用应用程序已有的变量。目标 URL 仍然是网站。代理主机字段接受的是主机,而不是网站 URL 或显示标签。

一次选择需要三种可能的结果

  • 有效的代理选择会提供主机和 1 到 65535 的端口。
  • 明确的 Direct 选择会为下一次请求清空代理主机。
  • 无效或缺失的选择会保持当前配置不变,并要求用户更正。

把这些结果区分开,可以防止被取消选中的行意外地让下一次请求走直连。在新选择未完成之前,应禁用请求按钮。

如果端点以文本形式到达,请在更改任一属性之前先解析并验证它们。TryStrToInt 让界面能够报告错误的端口,而不会抛出未捕获的转换异常。只在第一个冒号处拆分,仅适用于有意限制的主机名或 IPv4 格式:IPv6 字面量本身含有冒号。分开的主机字段和端口字段可以简化存储表示。

不要让界面上的点击去修改工作线程正在使用的客户端。应在操作之间应用选择,或者为每个并发操作提供各自配置好的客户端。选择器控制的是未来的连接;它无法把已经建立的传输转移到另一个出口。

相关文章