用curl快速验证接口响应
平时排查网页打不开、API调不通的问题,最常用的工具就是curl。它轻量又强大,直接在命令行就能发起HTTP请求。比如访问某个接口返回404,可以用下面的命令看详情:
curl -v http://example.com/api/user加了-v参数后,能看到完整的请求头和响应头信息,包括状态码、服务器类型、Cookie设置等。有时候发现接口明明有数据却拿不到,可能是Content-Type被设成了text/plain,导致前端没正确解析。
抓包分析真实通信过程
当curl看不出问题时,就得上抓包工具了。浏览器自带的开发者工具Network面板就够用。打开页面刷新一下,所有HTTP请求都会列出来。点开某个请求,能看Headers、Preview、Response这些标签页。
有次遇到一个图片加载慢的问题,看Timeline发现是Waiting (TTFB) 时间特别长,说明服务器处理太慢,不是网络带宽的问题。后来查到是CDN配置错误,源站响应超时没做降级处理。
模拟不同客户端行为
有些接口对User-Agent做过滤,普通请求能通,但程序调用就失败。这时候可以用curl伪造头部:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \n -H "Accept: application/json" \n http://api.example.com/data还碰到过API只接受POST但文档写的是GET,结果折腾半天。用-H指定Method再配合-d传参数才成功:
curl -X POST -d "name=test&value=1" http://api.example.com/submit检查HTTPS证书是否正常
现在很多接口都切到了HTTPS,但自签证书或者过期证书会导致连接失败。用curl加上-k虽然能跳过验证,但这只是临时方案:
curl -k https://internal-api.company.com更稳妥的做法是导出证书放到本地信任库,或者让运维更新有效证书。曾经有个内部系统因为证书过期三天,导致整个订单流程卡住,查日志才发现是SSL握手失败。
批量测试用脚本自动化
要测多个接口或者做回归测试,手动一个个敲命令太累。写个Shell脚本循环跑更省事:
#!/bin/bash\nurls=(\n "http://api.example.com/user"\n "http://api.example.com/order"\n "http://api.example.com/product"\n)\n\nfor url in "${urls[@]}"; do\n echo "Testing $url..."\n status=$(curl -o /dev/null -s -w "%{http_code}" $url)\n if [ $status -eq 200 ]; then\n echo "✓ OK"\n else\n echo "✗ Failed with $status"\n fi\ndone这个小脚本能输出每个接口的状态码,适合放在定时任务里监控核心服务。之前用它发现了测试环境数据库半夜自动重启导致API短暂不可用的问题。
关注重定向和Cookie机制
登录类接口经常涉及302跳转和Set-Cookie。curl默认不跟随跳转,得加-L参数:
curl -L -c cookies.txt http://login.example.com-c参数会把收到的Cookie保存下来,下次请求带上:
curl -b cookies.txt http://member.example.com/profile有次调试单点登录,发现跳过去没自动登录,抓包一看是跨域Cookie被浏览器拦截了,最后改成后端通过token中转才解决。