【问题标题】:How to get HTTP Status Code from Powershell Invoke-WebRequest call?如何从 Powershell Invoke-WebRequest 调用中获取 HTTP 状态代码?
【发布时间】:2020-08-21 17:53:17
【问题描述】:

我正在运行一个 Windows .bat 文件,试图通过 url 执行一个进程。我想从此调用中提取 Http 状态代码。我发现的例子让我看到了这个 sn-p,它报告 200 就好了。但是当我使用无效的 url 进行测试以获得 404 时,未设置 Http 状态代码。相反,错误详细信息显示在 DOS 提示符中。无论状态码系列如何,有没有一种方法可以可靠地提取 Http 状态码?如果这个 sn-p 不起作用,我对其他想法持开放态度。我只需要在变量中包含该状态代码,这样我就可以继续我的逻辑了。

设置 URL=https://stackoverflow.com 对于 /f "usebackqdelims=" %%A in ( `Powershell.exe -nologo -NoProfile -command "Invoke-WebRequest -Uri %URL% -UseBasicParsing | Select-Object -Expand StatusCode"` ) 请设置 HTTP_STATUS_CODE=%%A 回显 HTTP_STATUS_CODE=%HTTP_STATUS_CODE%

【问题讨论】:

    标签: powershell


    【解决方案1】:

    HTTP 404 被视为错误,因此该命令永远不会返回任何内容。

    将管道包装在 try/catch 块中,并从抛出的异常中获取状态代码:

    Powershell.exe -nologo -NoProfile -command "try{Invoke-WebRequest -Uri %URL% -UseBasicParsing -EA Stop | Select-Object -Expand StatusCode}catch{$_.Exception.Response.StatusCode}"
    

    【讨论】:

    • 这似乎有效,但它将“NotFound”放入我的变量而不是 404。当我使用有效的 url 时,我的变量中得到 200。是否有 Response.StatusCodeNumber 或类似的东西?
    • @jacekn 在$_.Exception.Response.StatusCode 前面放一个+,然后PowerShell 会将其转换为其底层数值:try{...}catch{+$_.Exception.Response.StatusCode}
    • 这个$_.exception.response.statuscode.value__ 做到了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2023-03-20
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多