GitLab中curl请求JSON参数引号丢失问题求助
GitLab中curl请求JSON双引号丢失的解决方案
问题原因
你原来的命令里,用单引号包裹了-d参数的全部内容,同时内部加了转义双引号\",但在GitLab CI的bash环境中,单引号内部的转义字符不会被解析,导致实际发送的JSON里双引号被丢弃,变成了{role:Admin}这种不符合JSON规范的格式。
可行解决方案
方案1:调整引号层级,用单引号包裹JSON外层,内部直接用双引号
将-d参数的内容改用单引号包裹,内部不需要转义双引号,同时去掉URL中变量外层多余的单引号(GitLab CI中变量可直接在无引号/双引号环境下解析):
curl -k -XPATCH -H "Content-Type: application/json" -d '{"role":"Admin"}' https://${admin_user}:${admin_password}@grafana-monitoring.${NAMESPACE}.test.com.example/api/orgs/1/users/2
方案2:使用Here-doc传递JSON数据
这种方式完全规避引号转义问题,直接传递纯净的JSON内容:
curl -k -XPATCH -H "Content-Type: application/json" --data @- https://${admin_user}:${admin_password}@grafana-monitoring.${NAMESPACE}.test.com.example/api/orgs/1/users/2 <<EOF {"role":"Admin"} EOF
方案3:提前定义JSON变量
先把JSON内容存入变量,再传递给curl,减少引号冲突:
JSON_PAYLOAD='{"role":"Admin"}' curl -k -XPATCH -H "Content-Type: application/json" -d "$JSON_PAYLOAD" https://${admin_user}:${admin_password}@grafana-monitoring.${NAMESPACE}.test.com.example/api/orgs/1/users/2
内容的提问来源于stack exchange,提问作者Yassen Fouad Anis
相关产品推荐
相关产品推荐

