Terraform HTTP Provider请求体中嵌套列表格式问题咨询
Terraform HTTP Provider 嵌套列表参数配置解决方案
你的核心问题是:cURL发送的是**表单编码(application/x-www-form-urlencoded)**数据,但Terraform默认会将request_body的map序列化为JSON,导致格式不匹配。以下是两种精准匹配需求的配置方式:
方法1:匹配cURL的表单编码格式
直接构造符合表单规范的请求体,同时设置对应请求头:
resource "http" "api_request" { url = "https://url:port/working/uri" method = "POST" request_headers = { "Content-Type" = "application/x-www-form-urlencoded" # 等价于cURL的-u admin:pass "Authorization" = "Basic ${base64encode("admin:pass")}" } # 拼接表单参数,用urlencode处理特殊字符 request_body = join("&", [ "field1=${urlencode("value1")}", "field2=${urlencode("[[value2a], [value2b]]")}" ]) insecure = true # 对应cURL的-k参数,跳过证书验证 }
方法2:若API支持JSON请求体
如果目标API接受JSON格式(而非表单),可以直接传递Terraform原生嵌套列表,无需字符串包裹:
resource "http" "api_request" { url = "https://url:port/working/uri" method = "POST" request_headers = { "Content-Type" = "application/json" "Authorization" = "Basic ${base64encode("admin:pass")}" } # 用jsonencode自动序列化为合法JSON request_body = jsonencode({ field1 = "value1" field2 = [["value2a"], ["value2b"]] }) insecure = true }
你当前配置的问题
你写的field2: "[['value2a'], ['value2b']]"多了内部单引号,导致传递的参数值带单引号,和cURL中的[[value2a], [value2b]]格式不符——即使去掉单引号,直接用字符串嵌套列表也容易出现编码问题,更推荐上面两种标准方式。
内容的提问来源于stack exchange,提问作者skittles
相关产品推荐
相关产品推荐

