code=$(curl -sS -o /tmp/resp.json -w '%{http_code}' "$URL")
[ "$code" = "200" ] || { echo "http $code"; exit 1; }
接口迁移后地址变了,脚本里的 curl 返回 404 的 HTML 页面,退出码仍是 0,5000 条记录全被写成同样的错误页内容,第二天页面打开全是 404 文案。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,curl 默认只要连接建立就返回 0,4xx 和 5xx 都不算失败。脚本只判断退出码,没看响应内容。
「curl 未校验状态码」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:加 -f 让 4xx 和 5xx 返回非 0;用 -w '%{http_code}' 单独取状态码判断;响应体先落临时文件 校验内容长度和开头再入库;拿一个不存在的路径跑一次 确认脚本会失败。
改完只确认一件事:请求不存在的地址时脚本返回非 0,不会把错误页写进数据库。
