C# (.NET 4.8) HTTP/S代理检测准确率提升技术求助
C# (.NET 4.8) HTTP/S代理检测准确率提升技术求助
大家好,最近我在做一个C# (.NET 4.8)项目,用来爬取并验证上百个HTTP/S代理,但目前遇到了准确率的瓶颈,想请各位大佬帮忙分析改进!
过去几天我测试了多种验证代理是否存活的方法,但当前的实现和常用在线代理检测工具相比,准确率只有大概50%——我程序标记为“存活”的代理里,只有一半能被在线工具确认有效,而且我特意确认过没有被IP检测接口限流,这个因素可以排除!
我的核心验证逻辑是:给每个代理配置HttpClient,请求一个返回公网IP的接口,对比返回的IP和代理IP是否一致,一致就判定代理存活。但实际结果和在线工具的差距实在太大,我试过两种思路都没改善:
- 思路1:请求IP检测接口,严格对比返回IP与代理IP
- 思路2:直接请求普通公开URL,仅检查是否返回200状态码
两种方法的准确率都没达到预期,和在线工具的结果偏差明显。下面是我当前的核心验证方法代码,真心希望大家能给我一些优化建议,提升检测的准确性!
// 注意:retries、timeOut、delayMs是我定义的全局配置变量 private static async Task<bool> Check(string proxy) { string[] proxyParts = proxy.Split(':'); if (proxyParts.Length < 2) { return false; // 无效的代理格式,直接返回 } string proxyIp = proxyParts[0]; // 重试机制:最多尝试retries次 for (int attempt = 1; attempt <= retries; attempt++) { var handler = new HttpClientHandler { Proxy = new WebProxy(proxy), UseProxy = true }; using (var checkClient = new HttpClient(handler) { Timeout = TimeSpan.FromMilliseconds(timeOut) }) { try { string jsonResponse = await checkClient.GetStringAsync("https://api.ipify.org?format=json").ConfigureAwait(false); var jsonObject = JToken.Parse(jsonResponse); string publicIp = jsonObject["ip"]?.ToString(); if (!string.IsNullOrEmpty(publicIp) && publicIp == proxyIp) { return true; // 代理IP与返回的公网IP匹配,验证通过 } } catch { // 最后一次尝试失败则返回false if (attempt == retries) { return false; } } // 重试前短暂延迟 await Task.Delay(delayMs).ConfigureAwait(false); } } return false; }
内容来源于stack exchange




