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

如何在PowerShell中无Body发起带嵌套参数的GET请求?

解决GET请求携带Body报错及嵌套参数转查询参数问题

一、问题根源

HTTP规范里,GET请求本就不应该携带请求体,虽然Postman这类工具允许这么做,但PowerShell的Invoke-RestMethod、部分服务器会严格遵循规范,直接拒绝带Body的GET请求,这就是你碰到报错的原因。

二、嵌套参数转查询参数的规则

嵌套JSON结构转查询参数,常用两种格式(后端一般都兼容):

  • 点符号层级:比如{"filter":{"name":"test","status":1}} → filter.name=test&filter.status=1
  • 方括号层级:同上JSON → filter[name]=test&filter[status]=1

三、PowerShell 实现方法

直接把参数拼进URL的查询字符串里,用Invoke-RestMethod发起GET请求即可。

示例1:手动拼接URL

假设原JSON Body是:

{
  "page": 1,
  "pageSize": 10,
  "filter": {
    "keyword": "demo",
    "category": "tools"
  }
}

对应的PowerShell命令:

$url = "https://你的API地址/data?page=1&pageSize=10&filter.keyword=demo&filter.category=tools"
Invoke-RestMethod -Uri $url -Method Get

示例2:自动生成查询字符串(适合参数多的场景)

用哈希表定义参数,再自动拼接成合法的查询字符串:

# 定义所有参数,嵌套参数用点符号命名
$queryParams = @{
    page = 1
    pageSize = 10
    "filter.keyword" = "demo"
    "filter.category" = "tools"
}

# 自动编码并拼接成查询字符串
$queryString = ($queryParams.GetEnumerator() | ForEach-Object { 
    "$($_.Key)=$([Uri]::EscapeDataString($_.Value))" 
}) -join "&"

# 拼接完整URL并发起请求
$url = "https://你的API地址/data?$queryString"
Invoke-RestMethod -Uri $url -Method Get

[Uri]::EscapeDataString()用来处理特殊字符(比如空格、中文、&),避免URL格式错误。

四、curl 实现方法

同样把参数转成查询字符串,推荐用-G配合--data-urlencode,让curl自动处理编码,避免格式错误。

方式1:直接拼接URL

curl "https://你的API地址/data?page=1&pageSize=10&filter.keyword=demo&filter.category=tools"

方式2:自动编码(推荐)

用-G指定把参数转为GET查询字符串,--data-urlencode自动处理特殊字符:

curl -G "https://你的API地址/data" ^
  --data-urlencode "page=1" ^
  --data-urlencode "pageSize=10" ^
  --data-urlencode "filter.keyword=demo" ^
  --data-urlencode "filter.category=tools"

(Windows下用^换行,Linux/macOS用\)

五、注意事项

  • 先确认后端API支持通过查询参数传递嵌套结构,如果API只接受POST请求的Body,那你得把请求方法改成POST。
  • 特殊字符必须做URL编码,否则会导致请求失败或参数解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:15:49