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

将含--data参数的CURL GET请求转为PowerShell请求时遇参数缺失报错

解决CURL GET请求带请求体转PowerShell的问题

我懂你遇到的困扰了——CURL里的--data参数在GET请求里会把JSON数据塞进请求体里,但PowerShell 5.1的Invoke-RestMethod默认对GET请求的-Body参数处理逻辑不一样:它会把哈希表自动转成URL查询参数(比如?net_cidr=10.0.0.0/8),而不是放到请求体里,这就导致API没在预期的位置拿到参数,所以才会报错说缺少net_id(本质是API期望从请求体读取net_cidr,结果只接收到空或者错误位置的参数)。

另外你还要注意CURL里的-k是忽略SSL证书验证,PowerShell 5.1没有直接对应的-SkipCertificateCheck参数,得手动加一段代码处理证书问题。

下面是修正后的完整代码:

# 忽略SSL证书验证(对应CURL的-k参数)
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

# 第一步:获取认证token
$authBody = ConvertTo-Json @{"username"="Test";"password"="Test"}
$tokenResponse = Invoke-WebRequest -Uri "https://RestAPI-URL" -Body $authBody -ContentType "application/json" -Method POST
$token = ($tokenResponse.Content | ConvertFrom-Json).access_token

# 第二步:构建GET请求的请求体(必须转成JSON字符串)
$header = @{auth="Basic $token"}
$requestBody = ConvertTo-Json @{ net_cidr = '10.0.0.0/8' }

# 发送GET请求,确保Body是JSON字符串且指定ContentType
Invoke-RestMethod -Uri "https://RestAPI-URL" -Headers $header -Body $requestBody -Method GET -ContentType "application/json"

关键修正说明:

  • 把哈希表$Parameters通过ConvertTo-Json转成JSON字符串再传给-Body,这样PowerShell才会把数据放到请求体里,而不是自动转成查询参数
  • 添加了忽略SSL证书验证的代码,匹配CURL的-k行为
  • 明确指定-ContentType为application/json,告诉API请求体的格式

另外要确认你的API确实支持GET请求带请求体——虽然HTTP规范里GET请求通常不建议带请求体,但有些API会这么设计,CURL支持这种行为,而PowerShell默认会调整GET请求的Body处理逻辑,所以我们需要手动指定JSON字符串来绕过这个默认行为。

内容的提问来源于stack exchange,提问作者jeremias kühnis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:14:11