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

将Curl API调用转为PowerShell循环100次并排查400错误

解决PowerShell调用API的400错误并实现循环调用记录响应码

你的400错误大概率是HTTP请求头的大小写不匹配导致的——很多API对请求头的命名大小写是敏感的,你在curl里用的是URN-Token和URN(首字母大写),但PowerShell哈希表里写的是小写的urn和urn-token,这会让API无法正确识别认证头,从而返回Bad Request。

接下来是修正后的完整代码,我们用Invoke-WebRequest替代Invoke-RestMethod(因为前者能直接获取响应状态码,不会在非2xx响应时直接抛出异常),同时修正请求头的大小写,加上循环逻辑并收集每次的响应码:

# 配置参数
$urn = 224
$token = 'xxxxxxxxxxxxx' # 你可以通过外部认证机制动态获取这个值
$url = "https://my-api-url/$urn/employee"
$headers = @{
    'URN' = $urn
    'URN-Token' = $token
}

# 用于存储所有响应码的数组
$responseCodes = @()

# 循环调用100次
for ($i = 1; $i -le 100; $i++) {
    try {
        $response = Invoke-WebRequest -Uri $url -Headers $headers -Method Get
        $responseCodes += $response.StatusCode
        Write-Host "第 $i 次调用成功,响应码:$($response.StatusCode)"
    }
    catch {
        # 捕获异常,提取错误响应的状态码
        $errorCode = $_.Exception.Response.StatusCode.value__
        $responseCodes += $errorCode
        Write-Host "第 $i 次调用失败,响应码:$errorCode"
    }
}

# 输出所有响应码,也可以保存到文件
Write-Host "所有调用的响应码:"
$responseCodes

# 如果需要保存到文件,取消注释下面的行
# $responseCodes | Out-File -FilePath "response_codes.txt"

几个关键的调整说明:

  • 请求头大小写匹配:严格对齐curl中的请求头命名(URN和URN-Token),避免API因无法识别认证头返回400。
  • 改用Invoke-WebRequest:该cmdlet会返回完整的响应对象,且不会在非2xx响应时直接终止脚本,方便我们捕获所有状态码。
  • 循环与结果存储:通过for循环实现100次调用,用数组$responseCodes收集每次的响应状态码,后续可以直接查看或导出到文件。
  • 异常捕获:加入try/catch块,确保即使某次调用失败(如返回4xx/5xx),循环仍能继续执行,同时记录错误状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:17:37