调用GitLab REST API拉取文件后base64解码报Invalid character in input stream
报错诱因及解决方法
核心报错诱因
- jq默认提取字符串字段时会自动用双引号包裹结果,双引号不属于base64编码的合法字符,直接传入解码工具就会触发「Invalid character in input stream」报错。
- 你使用的curl命令存在语法缺陷:请求URL末尾缺少闭合双引号,同时GitLab仓库文件API强制要求传入
ref参数(对应分支、标签或提交哈希),缺少该参数会返回错误响应,返回的JSON无合法base64编码的content字段。 - 部分系统的base64解码工具对输入中的换行、空白字符兼容性较差,若content字段返回的base64内容带换行也可能触发报错。
解决方案
按照以下要求调整命令即可:
- 给jq添加
-r参数,输出无引号包裹的原始字符串 - 补全curl命令的闭合引号,在请求URL中添加
ref参数指定文件所在的目标分支 - 若使用macOS系统,将解码命令
base64 -d替换为base64 -D适配系统差异
修正后的参考命令如下:
curl --request GET --header "PRIVATE-TOKEN: ${TOKEN}" "https://gitlab.example.com/api/v4/projects/123/repository/files/README%2Emd?ref=main" | jq -r '.content' | base64 -d
上述命令中
ref=main请替换为你实际的目标分支名
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

