将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
相关产品推荐
相关产品推荐

