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

使用Invoke-WebRequest向Wazuh服务器POST请求时遇无效请求体问题

解决Wazuh API POST请求的"Invalid Request Body"错误

你的问题核心在于JSON格式不符合规范,以及PowerShell处理请求体的方式问题,下面给你一步步解决的方案:

正确的PowerShell请求代码

最可靠的方式是用哈希表配合ConvertTo-Json生成标准JSON,避免手动拼接的语法错误:

# 构造请求体的哈希表
$requestBody = @{
    name = "newhost"
    ip   = "10.0.0.9"
} | ConvertTo-Json

# 发送POST请求到Wazuh API
Invoke-WebRequest -Body $requestBody `
                  -Uri "http://$($WAZUHSERVER):55000/agents?pretty" `
                  -Method Post `
                  -Credential $MyCredential `
                  -ContentType 'application/json'

为什么你的代码会报错?

  1. JSON语法错误:你手动写的JSON字符串用了单引号"{name:'newhost',ip:'10.0.0.9'}",但JSON规范要求所有键和字符串值必须用双引号,单引号在JSON里是不合法的,这是直接触发"Invalid Request Body"的原因。

  2. 哈希表未转JSON:如果你之前直接把哈希表传给-Body参数,PowerShell会默认把它解析为表单数据(application/x-www-form-urlencoded),而不是JSON格式,所以必须用ConvertTo-Json把哈希表转换成标准的JSON字符串,同时配合-ContentType 'application/json'告诉服务器请求体类型。

备选方案:手动编写正确的JSON字符串

如果你一定要手动写JSON,注意用单引号包裹整个字符串(避免内部双引号转义):

Invoke-WebRequest -Body '{"name":"newhost","ip":"10.0.0.9"}' `
                  -Uri "http://$($WAZUHSERVER):55000/agents?pretty" `
                  -Method Post `
                  -Credential $MyCredential `
                  -ContentType 'application/json'

如果用双引号包裹字符串,需要把内部的双引号转义为""或者\":

Invoke-WebRequest -Body "{`"name`":`"newhost`",`"ip`":`"10.0.0.9`"}" `
                  -Uri "http://$($WAZUHSERVER):55000/agents?pretty" `
                  -Method Post `
                  -Credential $MyCredential `
                  -ContentType 'application/json'

不过还是优先推荐用ConvertTo-Json的方式,既能保证格式正确,也方便后续修改请求体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:36