使用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'
为什么你的代码会报错?
JSON语法错误:你手动写的JSON字符串用了单引号
"{name:'newhost',ip:'10.0.0.9'}",但JSON规范要求所有键和字符串值必须用双引号,单引号在JSON里是不合法的,这是直接触发"Invalid Request Body"的原因。哈希表未转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
相关产品推荐
相关产品推荐

