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

从Python迁移到PowerShell后API请求返回空的问题求助

解决PowerShell POST请求数组参数与Python兼容问题

问题根源在于Python requests库与PowerShell Invoke-WebRequest处理数组类型表单参数的逻辑不同:

  • Python发送请求时,会将数组参数展开为重复的键值对,比如productsCN[]=PR1234&productsCN[]=PR3456&productsCC[]=PR1234&productsCC[]=PR3456
  • PowerShell默认会把数组拼接成单个字符串传递,导致接口无法解析数组结构

解决方案1:手动构建标准表单字符串

直接生成符合application/x-www-form-urlencoded格式的请求体,完全匹配Python的请求结构:

$arrayProducts = @("PR1234", "PR73456")
$params = @()

# 遍历产品代码,生成每个参数的键值对(自动URL编码)
foreach ($code in $arrayProducts) {
    $encodedCode = [System.Web.HttpUtility]::UrlEncode($code)
    $params += "productsCN[]=$encodedCode"
    $params += "productsCC[]=$encodedCode"
}

# 拼接成完整的表单字符串
$payloadStock = $params -join "&"

# 发送请求
$response = Invoke-WebRequest -Uri $urlStock -Body $payloadStock -Method POST -WebSession $webSession -ContentType "application/x-www-form-urlencoded"

解决方案2:使用HttpClient处理表单数据

利用.NET的FormUrlEncodedContent自动处理数组展开,逻辑与Python requests完全一致:

$arrayProducts = @("PR1234", "PR73456")

# 构建字典类型的表单数据
$formData = [System.Collections.Generic.Dictionary[string, object]]::new()
$formData.Add("productsCN[]", $arrayProducts)
$formData.Add("productsCC[]", $arrayProducts)

# 创建自动处理数组的表单内容
$content = [System.Net.Http.FormUrlEncodedContent]::new($formData)

# 复用现有WebSession的Cookie
$handler = [System.Net.Http.HttpClientHandler]::new()
$handler.CookieContainer = $webSession.Cookies
$httpClient = [System.Net.Http.HttpClient]::new($handler)

# 发送请求并获取响应
$response = $httpClient.PostAsync($urlStock, $content).Result
$responseContent = $response.Content.ReadAsStringAsync().Result

两种方案都能生成与Python请求完全一致的请求体,接口将正确返回多个产品的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:30:01