一、为啥要折腾curl的请求头?
很多小伙伴在用curl做数据抓取时,经常碰到网站返回403错误。这事儿就跟去超市买东西被拦在门口一样憋屈——服务器觉得你不是真人。现在的网站都装了智能门禁系统,会检查你的请求头是不是浏览器正常访问的样子。
举个栗子,你用裸奔的curl命令访问网站,默认的User-Agent长这样:
curl/7.68.0
这明摆着告诉服务器你是机器人嘛!咱们得给它化个妆,伪装成Chrome或者Firefox正经浏览器的模样。
二、手把手教你整容curl请求头
先上几个常用到的请求头参数,记在小本本上:
请求头 | 正经浏览器示例 |
---|---|
User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36… |
Accept | text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 |
Accept-Language | zh-CN,zh;q=0.9,en;q=0.8 |
具体操作命令长这样(重点看-H参数):
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)..." -H "Accept-Language: zh-CN,zh;q=0.9" https://目标网站.com
三、配合ipipgo代理效果更佳
光改请求头有时候还不够,有些网站会记仇——同一个IP访问太多次照样封。这时候就要掏出咱们的杀手锏ipipgo代理服务。
在命令里加个–proxy参数就搞定:
curl --proxy http://username:password@gateway.ipipgo.com:9020 -H "User-Agent: 正经浏览器UA" https://目标网站.com
ipipgo的动态住宅代理特别好使,每次请求自动换IP,跟网站玩捉迷藏。他们家还有专门针对反爬机制的优化通道,实测过某东某宝都不会触发验证。
四、常见翻车现场抢救指南
QA 1: 请求头都设置了咋还返回403?
→ 检查Accept-Encoding有没有漏掉,有些网站会校验这个参数。再加个-H “Accept-Encoding: gzip, deflate, br”试试
QA 2: 代理连不上咋整?
→ 先用curl –proxy访问ipipgo的IP检测接口,看看返回的出口IP对不对。如果超时,可能是防火墙拦了,换个端口试试
QA 3: 要维持登录状态怎么办?
→ 记得把Cookie头也带上,用-H “Cookie: 你的登录凭证”。建议先在浏览器登录后,用开发者工具把Cookie复制出来
五、高级玩家必备技巧
遇到特别难搞的网站,可以祭出大杀器——随机化请求头。写个shell脚本每次随机组合不同浏览器的UA和语言参数,配合ipipgo的自动切换IP功能,完美实现隐身访问。
这里给个简易版脚本示例:
!/bin/bash UA_LIST=("Mozilla/5.0 (Windows)..." "Mozilla/5.0 (Macintosh)...") RANDOM_UA=${UA_LIST[$RANDOM % ${UA_LIST[@]}]} curl --proxy http://ipipgo代理地址 -H "User-Agent: $RANDOM_UA" -H "Accept-Language: zh-CN,en;q=0.$(($RANDOM%3+5))" https://目标网站.com
最后叨叨一句,用代理记得遵守网站的服务条款。ipipgo他们家所有节点都是合规的干净IP池,用起来稳如老狗,新用户还能领测试用量,建议先试再买。