为何wget -O命令获取的JSON文件仅为单行无换行?
问题原因及排查方向
核心原因:请求头差异导致服务器返回不同格式JSON
浏览器和wget发送的HTTP请求头存在明显区别,服务器会根据请求头返回适配的JSON格式:
- 浏览器请求时会携带
User-Agent(标识自身为浏览器)、Accept等头信息,服务器识别后返回带换行的格式化JSON,方便人工查看; wget默认发送的请求头较为简单,服务器会默认返回无换行的紧凑格式JSON——这是多数API服务的优化策略,给程序返回紧凑格式可节省带宽。
其他可能的排查点
$requis变量内容不一致:检查脚本中$requis对应的URL,是否和浏览器地址栏的URL完全一致,比如是否多了?pretty=false这类控制JSON格式的参数;- 传输编码异常:如果服务器返回gzip压缩的JSON,虽然
wget默认会自动解压,但少数情况下环境变量或配置异常可能导致解压失败,最终生成单行内容; - 注:日志参数
-a仅用于追加日志,不会影响下载的JSON内容格式。
验证与解决方法
- 模拟浏览器请求头下载:给
wget添加浏览器的请求头,强制服务器返回格式化JSON:
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" --header="Accept: application/json" -O /home/carlos/answer.json -a /home/carlos/logs/log_wget$hoje.log $requis
- 用curl对比测试:在服务器上执行curl命令,查看返回的JSON格式和响应头,确认问题根源:
curl -v $requis > test_curl.json # 查看响应头里的Content-Type、Content-Encoding等字段,判断是否存在压缩或格式控制
- 校验
$requis变量:执行echo $requis,将输出与浏览器地址栏的URL对比,确保无额外参数或拼写错误。
内容的提问来源于stack exchange,提问作者Rabelo
相关产品推荐
相关产品推荐

