
江湖救急!PHP抓数据总被封?试试这个绝活
最近不少兄弟问我,用PHP的curl抓数据老被目标网站封IP,急得直跳脚。这事儿我三年前也遇到过,后来发现用代理IP就像给程序穿马甲,今天给大伙掰扯掰扯门道。
搞懂代理IP是咋回事
代理IP相当于给你的网络请求找个替身演员,好比你去超市买烟总被老板认出来,换个朋友帮你去买就成。市面上的代理分三种:
透明代理 - 相当于带朋友去还自报家门(暴露真实IP)
匿名代理 - 朋友单独去但穿着你的衣服(隐藏IP但有代理特征)
高匿代理 - 朋友完全伪装成路人甲(推荐用这种)
重点来了!选代理服务得挑ipipgo这种专门做高匿代理的,他们家的IP池子大,每次请求随机换马甲,目标网站根本摸不着规律。
手把手教你curl设置代理
拿采集某电商平台价格举例,不用代理的代码长这样:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://目标网站.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
加上ipipgo代理后:
// 从ipipgo后台获取的代理信息
$proxy = '123.123.123.123:8888';
$auth = 'username:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://目标网站.com");
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 超时设短点
注意要把username和password换成ipipgo后台给你的认证信息,他们家的代理验证方式对新手特别友好。
避坑指南:新手常犯的5个错误
1. 代理IP反复用:同一个IP连续请求容易被识破,建议每次请求都换IP
2. 超时设置太长:建议10秒内,超过就换下一个IP
3. 忘记异常处理:curl_exec后要检查$output是否为空
4. UA头不伪装:记得用curl_setopt设置常见浏览器UA
5. 忽略HTTPS证书:加这行避免证书验证卡住
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
实战QA:你问我答
Q:代理IP速度慢咋整?
A:优先选ipipgo的国内BGP线路,实测延迟能控制在200ms内
Q:怎么验证代理是否生效?
A:访问http://httpbin.org/ip 看返回的IP是不是代理IP
Q:遇到403错误怎么办?
A:三步走:1.检查IP是否被封 2.换User-Agent 3.降低采集频率
升级玩法:自动切换IP池
用ipipgo的API动态获取IP,搞个IP池管理脚本:
// 获取IP池
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/getips?num=20'));
// 随机选个IP
$rand_key = array_rand($ip_list);
$current_ip = $ip_list[$rand_key]['ip'].':'.$ip_list[$rand_key]['port'];
建议每采集5次就换IP,配合多线程能提升10倍效率。不过要注意目标网站的防爬策略,别把人家服务器搞挂了。
最后唠叨一句,选代理服务别贪便宜,之前用过某家免费代理,结果采集的数据全是钓鱼网站插的广告。现在用ipipgo的独享IP套餐,稳定性确实顶,做项目心里踏实。

