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

PowerShell获取REST请求结果码及登录令牌并复用方法

在PowerShell中处理REST请求:获取状态码与提取令牌

嘿,针对你的两个问题,我给你一步步拆解解决方案:

1. 获取REST请求的结果代码(状态码)

当你用Invoke-WebRequest发送请求时,它会返回一个包含请求全量信息的对象。你只需要把请求结果赋值给变量,就能通过StatusCode属性拿到数字状态码(比如200代表成功,401代表未授权),StatusDescription则对应文本描述(比如"OK")。

举个基础示例:

# 发送请求并保存响应
$response = Invoke-WebRequest -Uri $loginUrl -Method POST -Body ($params|ConvertTo-Json) -ContentType "application/json"

# 输出状态码和描述
Write-Host "请求状态码: $($response.StatusCode)"
Write-Host "状态描述: $($response.StatusDescription)"

如果请求返回4xx/5xx这类错误状态码,Invoke-WebRequest默认会抛出异常。这时可以用try/catch块捕获异常,从异常对象里提取错误状态码:

try {
    $response = Invoke-WebRequest -Uri $loginUrl -Method POST -Body ($params|ConvertTo-Json) -ContentType "application/json"
    Write-Host "请求成功!状态码: $($response.StatusCode)"
} catch {
    # 从异常中提取错误状态码
    $errorStatusCode = $_.Exception.Response.StatusCode.Value__
    Write-Host "请求失败,错误状态码: $errorStatusCode"
}

2. 提取响应中的令牌并保存

你的POST请求返回JSON格式响应,所以第一步要把响应的Content字段转换成PowerShell对象,再提取出令牌字段(注意:字段名要和实际API返回一致,常见的有access_token、token等)。

完整示例代码

结合你原有的代码,修改后如下:

$loginUrl = "https://some-ip"
$username = "your-actual-username" # 替换成你的用户名
$password = "your-actual-password" # 替换成你的密码

$params = @{ 
    "username" = $username
    "password" = $password
}

try {
    # 发送POST请求
    $response = Invoke-WebRequest -Uri $loginUrl -Method POST -Body ($params | ConvertTo-Json) -ContentType "application/json"

    # 将JSON响应转换为PowerShell对象
    $responseData = $response.Content | ConvertFrom-Json

    # 提取令牌(这里假设字段是access_token,根据实际API返回修改)
    $authToken = $responseData.access_token

    # 方式1:直接存在变量里,供后续脚本调用
    # 后续步骤可以直接使用$authToken变量

    # 方式2:保存到文本文件(适合临时存储,注意明文风险)
    $authToken | Set-Content -Path ".\auth_token.txt"

    # 方式3:加密保存(更安全,推荐用于敏感数据)
    $secureToken = $authToken | ConvertTo-SecureString -AsPlainText -Force
    $secureToken | Export-Clixml -Path ".\auth_token_secure.xml"

    Write-Host "令牌提取并保存成功!"
} catch {
    $errorStatusCode = $_.Exception.Response.StatusCode.Value__
    Write-Host "登录请求失败,错误状态码: $errorStatusCode"
}

关键提示

  • 不确定令牌字段名的话,可以先执行$response.Content | ConvertFrom-Json | Get-Member查看所有属性,找到对应的令牌字段。
  • 敏感数据尽量用加密方式(Export-Clixml)存储,避免明文泄露风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:37:37