You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在curl POST请求中正确传递payload变量?

问题分析与解决方案

当前传递变量的方法不正确,问题出在两点:

  1. Jenkins的sh步骤中,单引号包裹的字符串不会解析变量,所以你写的'{"cell_ids": ["${payload}"]}'里的${payload}不会被替换为实际变量值。
  2. 即便变量被替换,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:57:46