字里行间

curl 下载失败显示 18 或 23?分清短传输与本地写入错误

用 curl 通过机场节点下载文件时,终端里出现 curl: (18) 或 curl: (23),都可能表现为“下载没完成”,但排查方向完全不同。18 指向传输长度不完整,23 指向本地写入失败。先看退出码,可以避免反复换节点却没有解决真正的问题。

退出码 18:收到的数据比预期少

curl 官方手册把 18 解释为部分文件:服务器声明的传输大小与实际收到的大小不一致。常见表象是下载进度提前结束、文件比预期小,或者连接在传输中被关闭。

先用一个确定可重复的测试地址执行:

curl -L --fail --output test.bin --write-out "code=%{http_code} size=%{size_download}\n" https://example.com/test.bin

连续测试直连和代理路径,保持 URL、设备与时间窗口一致。若只有某个节点反复出现 18,可进一步记录客户端日志和失败时刻;若直连同样失败,则目标服务器或本地网络也在候选范围。不要只凭一次失败认定节点有问题。

退出码 23:数据到了,但写不进文件

23 表示 curl 将收到的数据写到本地时出错。此时优先检查:目标磁盘是否已满、目录是否有写入权限、文件是否被安全软件或其他程序占用、输出路径是否存在,以及管道下游程序是否提前退出。

可以先改写到一个确定可写的小目录:

curl -L --fail --output "$HOME/curl-test.bin" https://example.com/test.bin

Windows PowerShell 可改用用户临时目录。若写入标准输出再通过管道处理,还要检查后面的命令是否主动关闭了管道。退出码 23 通常不能靠换机场节点修复。

三步定位流程

第一步,保留退出码,别只截取“下载失败”四个字。第二步,记录响应状态和已下载字节;18 更像远端或链路提前结束,23 更像本地保存阶段出错。第三步,只改变一个条件复测:18 做直连与代理对照,23 改用已知可写目录。

验收时,至少连续完成三次相同大小的下载,并核对退出码为 0、文件大小一致。如果来源提供校验值,再核对哈希。这样才能确认故障已经消失,而不是某次碰巧成功。

与机场客户端的关系

客户端显示“已连接”只证明代理进程在运行,不代表每个下载都完整。把 curl 退出码、HTTP 状态、下载字节数和客户端日志放在同一时间线上,客服才能判断是节点中断、目标站异常,还是本地磁盘问题。

参考资料

评论

搜索文章

正在加载搜索…