当爬虫遇上反爬:HttpClient如何用代理IP突破限制
搞网页抓取最头疼的就是IP被封,特别是用C做数据采集的兄弟们应该深有体会。咱们今天不整那些虚的,直接上干货教你怎么用HttpClient配代理IP,重点说说怎么用ipipgo的服务来保命。
HttpClient基础操作
先整明白怎么用HttpClient发请求,这玩意儿可比WebClient好用多了。初始化的时候记得设置超时,别让程序卡死:
var handler = new HttpClientHandler();
var client = new HttpClient(handler){
Timeout = TimeSpan.FromSeconds(15)
};
发GET请求要这样玩,记得加上User-Agent伪装浏览器:
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0) ...");
代理IP救命三招
当出现403 Forbidden或者429 Too Many Requests的时候,就该换代理IP了。用ipipgo的服务配置起来特简单:
代理类型 | 代码示例 | 适用场景 |
---|---|---|
短效静态IP | handler.Proxy = new WebProxy(“123.123.123.123:8888”) | 需要稳定IP时 |
动态轮转IP | handler.Proxy = new WebProxy(“gateway.ipipgo.com:9023”) | 高频采集需求 |
独享高速IP | handler.Proxy = new WebProxy(“vip.ipipgo.com:9011”) | 处理图片/视频 |
实战防封技巧
1. IP池要够大:用ipipgo的API定时获取新IP,建议每次请求换不同代理
2. 请求间隔别太规律:用Random.Next(3,8)设置随机等待秒数
3. 失败自动切换:当遇到异常状态码时立即更换代理
try{
var response = await client.GetAsync(url);
}
catch{
// 调用ipipgo的API更换IP
SwapProxy(handler);
}
常见问题QA
Q:代理IP用着用着就失效了咋整?
A:这种情况八成是IP被目标网站标记了,用ipipgo的动态IP池会自动刷新,记得在代码里设置失败重试机制。
Q:HTTPS网站抓取总报证书错误?
A:在HttpClientHandler里加上这个配置:
handler.ServerCertificateCustomValidationCallback = (msg, cert, chain, err) => true;
Q:怎么判断代理IP是否生效?
A:访问http://ip.ipipgo.com/checkip 这个地址,能返回当前使用的代理IP地址。
真实案例演示
最近有个兄弟做电商价格监控,用了我给的方案:
1. 每次请求随机选ipipgo的国内机房IP
2. 每完成50次请求休眠2分钟
3. 遇到验证码自动切换城市节点
结果连续跑了7天没被封,采集成功率从37%飙到92%。
最后提醒大伙儿,选代理服务得看准质量。像ipipgo这种支持按量付费、IP存活率95%以上的服务商,用起来确实比自建代理池省心。别等到IP被封成筛子了才想起加代理,那会儿数据早就采崩了。