手把手教你用curl文件玩转API自动化
最近好多做数据抓取的朋友问我,怎么同时处理几百个API请求不封IP?这事儿说难也不难,关键得会点批量处理的技巧。今天咱们就用最常用的curl命令,搭配ipipgo的代理服务,教你怎么像工厂流水线一样处理API请求。
准备家伙事儿
首先得备齐三样东西:
1. 装好curl的命令行环境(Windows用PowerShell,Mac直接开终端)
2. 提前准备好的API地址清单(存成txt文件,每行一个网址)
3. ipipgo的动态代理池(建议用他们的s5协议,带账号密码认证那种)
实战四步走
咱们拿天气预报API做例子,假设要批量查50个城市的天气:
第一步:建请求文件
新建个weather_apis.txt,内容长这样:
http://api.weather.com/beijing http://api.weather.com/shanghai ...(其他城市)
第二步:写循环脚本
在终端里敲这个命令:
while read url; do curl -x socks5://user:pass@proxy.ipipgo.net:24000 "$url" done < weather_apis.txt
这里注意替换成你在ipipgo后台拿到的真实账号密码,端口号也得看具体套餐类型。
第三步:结果处理
想保存返回数据的话,加个输出参数:
curl -x ... -o "output_$(date +%s).json"
这个写法会给每个结果生成带时间戳的独立文件,避免数据覆盖。
第四步:异常监控
老司机都会加个错误重试机制:
curl --retry 3 --retry-delay 5 ...
意思是失败自动重试3次,每次间隔5秒,这个对不稳定API特别管用。
常见坑点QA
Q:为啥用了代理还是被封?
A:检查是不是代理IP重复使用了,ipipgo后台可以设置”每次请求换IP”,把这个开关打开
Q:怎么控制请求频率?
A:在循环里加sleep命令,比如每请求10次停1秒:
if (( $count % 10 == 0 )); then sleep 1; fi
Q:返回数据乱码咋办?
A:给curl加上字符编码参数:
curl --compressed -H "Accept-Encoding: gzip" ...
性能优化秘籍
如果要处理上千个请求,单线程太慢,可以用xargs命令开多线程:
cat apis.txt | xargs -P 8 -I {} curl -x ... {}
这个-P 8表示同时跑8个线程,根据自己电脑配置调整。记得在ipipgo控制台把”并发数”配额调高,不然会被限流。
最后提醒下,批量请求一定要注意目标网站的服务条款,别把人家服务器搞挂了。用ipipgo的轮换IP不仅能避免封禁,他们家的IP池更新频率够快,基本能保证每次请求都是新IP。