PowerShell中Invoke-RestMethod传查询参数返回403错误求助
故障根因
- 你使用的目标接口仅从URL的查询参数位置读取
param1、param2、apikey三个字段,不会读取请求体中的参数。 - 第一种写法直接将参数拼接在URL后,符合接口的参数读取规则,因此可以正常运行;第二种写法将参数传入
-Body放在请求体中,接口无法读取到必要参数,因此运行失败。
推荐解决方案
如果你希望避免手动拼接URL参数,又符合接口的参数传递规则,可以使用.NET内置的查询字符串构造工具实现参数自动拼接:
# 引入System.Web程序集用于处理查询参数 Add-Type -AssemblyName System.Web # 基础请求地址 $baseUri = "https://testendpoint.com/test" # 构造查询参数集合 $queryParams = [System.Web.HttpUtility]::ParseQueryString([String]::Empty) $queryParams['param1'] = 'value1' $queryParams['param2'] = 'value2' $queryParams['apikey'] = 'keyvalue' # 拼接生成最终请求地址 $uriBuilder = [System.UriBuilder]$baseUri $uriBuilder.Query = $queryParams.ToString() # 发起请求 Invoke-RestMethod -Uri $uriBuilder.Uri -Method 'Post'
如果确认目标接口支持从表单格式的请求体中读取参数,可以在请求时指定ContentType适配表单格式,修改后的请求代码如下:
$body = @{ param1='value1'; param2='value2'; apikey='keyvalue'; } $endpoint = "https://testendpoint.com/test" # 新增ContentType指定请求体为表单格式 Invoke-RestMethod -Uri $endpoint -Body $body -Method 'Post' -ContentType 'application/x-www-form-urlencoded'
内容的提问来源于stack exchange,提问作者Razoll
相关产品推荐
相关产品推荐

