
手把手教你用PHP抓数据不封IP
最近好些个做电商的朋友问我,用PHP写爬虫总被目标网站封IP咋整?这事儿其实就跟打游戏开小号一个道理,多备几个代理IP轮着用才是正解。咱今天就拿php curl举个栗子,教你怎么用ipipgo的代理服务稳当当地抓数据。
基础款GET请求代码
先整个最简单的curl请求模板,后面再往里头加料:
$url = 'https://目标网站.com/api';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
这段代码跑起来就跟裸奔似的,目标网站分分钟就能逮住你的真实IP。就像去菜市场砍价不戴口罩,摊主记住你了下次直接涨价。
给请求套上代理马甲
重点来了!咱们要往代码里塞代理配置。这里用ipipgo的代理服务举个例,他家提供的API格式贼方便:
$proxy = 'http://用户名:密码@gateway.ipipgo.com:端口';
// 举个真实栗子 ↓
// $proxy = 'http://vipuser:abcd1234@proxy.ipipgo.com:31028';
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
注意坑点:
- 密码里有特殊符号记得用urlencode转码
- 代理类型要和服务商给的对上号
- 超时时间设长点,建议15秒以上
完整代码大拼盘
把前面说的都攒一块儿,整个能实战的代码:
function crawlWithProxy($targetUrl){
$ch = curl_init();
// 代理配置
$proxy = 'http://vipuser:abcd1234@proxy.ipipgo.com:31028';
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
// 请求配置
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过https验证
$result = curl_exec($ch);
if(curl_errno($ch)){
echo '出错啦: '.curl_error($ch);
}
curl_close($ch);
return $result;
}
// 实战调用
$data = crawlWithProxy('https://目标网站.com/products');
老司机常见翻车现场
| 症状 | 诊断 | 药方 |
|---|---|---|
| 返回空白页 | 代理连接失败 | 检查IP端口、账号密码 |
| 经常超时 | 代理服务器不稳定 | 换ipipgo的高端套餐 |
| SSL证书报错 | HTTPS配置问题 | 关闭验证或更新证书 |
为啥推荐ipipgo?
自家用过的才敢推荐,这几点确实顶:
- 独享IP池不撞车
- 响应速度控制在200ms内
- 有专业技术客服救火
- 支持按量付费不浪费
实战QA三连
Q:代理IP用几次就失效?
A:建议每次请求都换IP,ipipgo的API支持自动切换,在代码里加个IP池轮询就行。
Q:采集速度像蜗牛?
A:八成是代理服务器不给力,换成ipipgo的企业级节点,速度能翻三倍不止。
Q:怎么防反爬?
A:除了换IP,记得在请求头里加User-Agent,用ipipgo的高匿代理更保险。
最后叨叨句,数据采集这事儿讲究个快准稳。选对代理服务商能省心一大半,ipipgo我们团队实测过,百万级请求量扛得住,新用户还能白嫖测试额度,具体去官网瞅瞅吧。

