将选定的代理应用到 Delphi 的 TIdHTTP 客户端
将 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 字面量本身含有冒号。分开的主机字段和端口字段可以简化存储表示。
不要让界面上的点击去修改工作线程正在使用的客户端。应在操作之间应用选择,或者为每个并发操作提供各自配置好的客户端。选择器控制的是未来的连接;它无法把已经建立的传输转移到另一个出口。