手把手教你用Node fetch发POST请求
最近好多做数据采集的哥们儿问,用Node.js发请求老被目标网站封IP怎么办?这事儿其实就跟打游戏被ban号一个道理,解决方案也很简单——代理IP轮换大法。今儿咱们就拿ipipgo家的服务做例子,说说怎么用Node fetch发POST请求还不被封。
基础装备准备
先装个node-fetch库,别傻乎乎用原生模块了。命令行敲这个:
npm install node-fetch@2 // 注意用老版本兼容性更好
准备个靠谱的代理服务,这里用ipipgo的动态住宅代理演示。他们家有个好处是自动切换IP,不用自己维护IP池。注册后拿到API密钥,代理地址长这样:
http://username:password@gateway.ipipgo.com:8080
实战代码拆解
重点来了!配代理的姿势要记牢:
const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');
// 代理配值(注意替换自己的账号)
const proxyAgent = new HttpsProxyAgent(
'http://你的账号_不带中文:密码@gateway.ipipgo.com:8080'
);
async function sendPost(url, data) {
try {
const response = await fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: {'Content-Type': 'application/json'},
agent: proxyAgent // 关键在这里挂代理
});
return await response.json();
} catch (error) {
console.log('请求扑街了:', error);
}
}
// 示例用法
sendPost('https://api.某某网站.com/login', {
username: 'test',
password: '123456'
});
注意坑点:
- 代理账号里千万别带中文,否则认证失败
- 目标网站用HTTPS的话,记得配https-proxy-agent
- 超时设值建议加个setTimeout,别傻等
常见翻车现场QA
Q:代理连不上咋整?
A:先检查代理地址格式对不对,用curl命令测试下:
curl -x http://账号:密码@gateway.ipipgo.com:8080 https://httpbin.org/ip
Q:返回407代理认证错误?
A:九成九是账号密码输错了,或者套餐过期了。去ipipgo后台看看剩余流量
Q:怎么实现每次请求换IP?
A:在ipipgo控制台开启按请求切换IP模式,代码里不用改任何东西
选代理服务要看啥?
市面上的代理服务五花八门,但做数据采集得认准这几个点:
功能 | 机房代理 | 住宅代理 |
---|---|---|
IP真实性 | ❌ 容易被识破 | ✅ 真实家庭IP |
并发请求 | ✅ 可多线程 | ⚠️ 有限制 |
像ipipgo的动态住宅代理就比较适合爬虫场景,虽然价格比机房代理贵点,但不容易被ban。他们家还有个妙处是地区精准定位,比如你要采集某地的天气数据,可以直接锁对应城市的出口IP。
省流小技巧
最后分享个省钱妙招:ipipgo的流量套餐用按时计费模式比包月划算,特别适合项目初期测试阶段。等业务稳定了再切包月套餐,这样不容易花冤枉钱。
要是手头紧,可以先蹭他们的试用套餐(新用户送1G流量)。不过注意别用来搞暴力爬取,试用套餐的IP质量会差些,正式干活还得上付费版。