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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:43:18