如何在curl POST请求中正确传递payload变量?
问题分析与解决方案
当前传递变量的方法不正确,问题出在两点:
- Jenkins的
sh步骤中,单引号包裹的字符串不会解析变量,所以你写的'{"cell_ids": ["${payload}"]}'里的${payload}不会被替换为实际变量值。 - 即便变量被替换,payload本身的格式会导致JSON结构错误——你的payload输出是
\"G1/H77/J1\",\"G1/H77/J2\",...,直接放到["${payload}"]里会变成一个包含逗号分隔字符串的单个数组元素,而非多个独立元素。
正确实现方式
方法一:直接利用Groovy多行字符串解析变量
使用Groovy的多行双引号字符串(""" ... """),让Jenkins先解析${payload}变量,再传递给shell执行:
def VALUES_BEFORE = sh(script: """ curl -X POST "http://kub01.abc.com:345678/abc/def" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{"cell_ids": [${payload}]}' | json_pp """, returnStdout: true).trim()
这里${payload}会被替换为实际值,结合后cell_ids对应的JSON结构会变成["G1/H77/J1","G1/H77/J2","G1/H77/J3","G10/H77/J1","G10/H77/J2"],符合接口要求。
方法二:先清理payload的转义引号(如果需要)
如果payload中的\"是多余的转义符,可以先清理再传递:
// 去掉payload中的转义双引号 def cleanedPayload = payload.replaceAll(/\\"/, '"') def VALUES_BEFORE = sh(script: """ curl -X POST "http://kub01.abc.com:345678/abc/def" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{"cell_ids": [${cleanedPayload}]}' | json_pp """, returnStdout: true).trim()
内容的提问来源于stack exchange,提问作者user17058837
相关产品推荐
相关产品推荐

