手把手教你用curl加Header防封爬数据
最近有老铁问我,用curl爬数据老被网站封IP咋整?今天咱们就唠唠这个事。重点说个狠招——自定义Header+代理IP组合拳,亲测有效。
先说个真实案例:某电商平台的价格监控脚本,用普通curl请求不到半小时就被ban。后来给请求头加了浏览器特征,再配合ipipgo的动态代理池,连续跑了三天都没事。下面具体说说怎么操作。
curl加Header的正确姿势
先看个典型翻车现场:
curl https://目标网站.com
这种裸奔式请求,服务器一看就知道是机器人在搞事情。咱们得给curl穿件马甲:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -H "Accept-Language: zh-CN,zh;q=0.9" -H "Referer: https://www.google.com/" https://目标网站.com
注意这三个关键Header:
Header名 | 作用 | 示例值 |
---|---|---|
User-Agent | 伪装浏览器 | Chrome或Firefox最新版 |
Accept-Language | 语言设置 | zh-CN优先 |
Referer | 来源页面 | 模拟搜索引擎跳转 |
代理IP的正确打开方式
光改Header还不够,得配合代理IP才能彻底隐身。这里推荐用ipipgo的服务,他家有专门的防封套餐。看具体用法:
curl -x http://用户名:密码@proxy.ipipgo.com:端口号 -H "User-Agent: Mozilla/5.0..." https://目标网站.com
注意这两个坑:
- 别用免费代理,99%都是公开IP池,早被网站拉黑了
- 住宅代理比机房代理更隐蔽,ipipgo的动态住宅IP套餐实测成功率更高
实战避坑指南
遇到过最奇葩的封禁:某网站居然检测Cookie中的字体渲染参数!这里分享几个骚操作:
- 定期更换Header里的Accept-Encoding值
- 在请求头里随机插入无意义但合法的字段,比如X-Requested-With: XMLHttpRequest
- 用ipipgo的会话保持功能,让同一IP维持合理访问频率
常见问题QA
Q:加了Header还是被封怎么办?
A:检查是否漏了Cache-Control字段,建议加上Cache-Control: max-age=0模拟浏览器行为
Q:代理IP速度慢怎么破?
A:ipipgo的智能路由功能能自动选最快节点,或者在curl命令后加-m 30设置超时时间
Q:需要处理cookie怎么办?
A:先用curl的-c cookie.txt参数保存cookie,后续请求带上-b cookie.txt
终极保命方案
最后给个万能模板,记得替换成自己的ipipgo账号:
curl -x http://vipuser:123456@proxy.ipipgo.com:8899 -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -H "Accept: text/html,application/xhtml+xml" -H "Accept-Encoding: gzip, deflate, br" --compressed https://目标网站.com
这个模板有三处关键设计:
- 使用ipipgo的企业级代理通道
- 模拟完整浏览器特征
- 开启压缩传输节省流量
遇到特别难搞的网站,可以联系ipipgo技术支持定制专属反爬方案,他们工程师处理过各种变态反爬策略,像什么TLS指纹验证、浏览器指纹检测都能搞定。