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

PowerShell Invoke-RestMethod提交数组开头Body请求报错问题

问题根因

抛出该错误是两个配置错误共同导致的:

  • JSON序列化不符合接口要求:ConvertTo-Json默认会枚举展开传入的单元素数组,原代码生成的请求体实际是单个对象{"ipAddress": "10.200.2.55"},并非接口要求的数组包裹结构;未指定序列化深度时,复杂嵌套结构还可能出现序列化截断。
  • 请求头配置错误:调用Invoke-RestMethod传字符串类型的Body时,默认Content-Type为application/x-www-form-urlencoded,服务端无法按JSON格式解析请求体,返回的异常响应被PowerShell解析时触发块长度不匹配报错。如果本地HTTPS服务使用自签名证书,证书校验失败也会触发同类错误。
正确实现代码

序列化完成后建议先输出$jsonBody校验,确认内容为[{"ipAddress": "10.200.2.55"}],与Postman中可正常调用的请求体完全一致后再发起请求。

  • PowerShell 5.1 版本适配代码:
# 本地自签名HTTPS测试环境专用,跳过证书校验
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

$Url = "https://localhost/GetUpdateInfo"
$requestData = @(
    @{
        ipAddress = "10.200.2.55"
    }
)
# -NoEnumerate参数禁止数组被展开,-Depth指定足够序列化深度避免内容截断
$jsonBody = ConvertTo-Json -InputObject $requestData -NoEnumerate -Depth 10
# 明确指定请求体格式为JSON
Invoke-RestMethod -Method Post -Uri $Url -Body $jsonBody -ContentType "application/json"
  • PowerShell 7+ 版本适配代码:
$Url = "https://localhost/GetUpdateInfo"
$requestData = @(
    @{
        ipAddress = "10.200.2.55"
    }
)
$jsonBody = ConvertTo-Json -InputObject $requestData -NoEnumerate -Depth 10
# 原生支持跳过自签名证书校验,无需修改全局证书回调
Invoke-RestMethod -Method Post -Uri $Url -Body $jsonBody -ContentType "application/json" -SkipCertificateCheck

内容的提问来源于stack exchange,提问作者Pomidor_83

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:09:25