【问题标题】:PowerShell: HTTP Response Code is missing following a POST (small load test)PowerShell:POST(小负载测试)后缺少 HTTP 响应代码
【发布时间】:2021-12-13 23:58:03
【问题描述】:

大师们,我的代码已经完成了 99% 的工作,这是一个执行 HTTP POST 的 PowerShell 脚本。在其中,我试图打印以控制台来自驻留在第 7 层 API-GW 上的 Web 服务器的 HTTP 响应代码(第 7 层 API-GW 在硬化的 Linux 服务器之上有一个 Web 服务器) - 这不是IIS。我理解通过在内存中绘制整个文件来执行 HTTP POST 的缺点,如下所示;我对此并不担心——我的负载测试很小,并且在 30 个 HTTP POST 后终止。我的问题是,为什么它没有从服务器打印出 HTTP 响应代码?它正在获得答案,但在 PowerShell 控制台窗口中显示空白而不是响应代码。

$FilePath = 'D:\Scripts\AVTest\Clean Files\AssetHandbook.pdf';
#Symantec:
$URL = 'https://labserver1.dev.local:8443/Scanfile/test';
#Sophos:
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath);
# $fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$fileEnc = ([System.Text.Encoding]::GetEncoding("ISO-8859-1").GetString($fileBytes));
$boundary = [System.Guid]::NewGuid().ToString();
$LF = "`r`n";
$bodyLines = (
    "--$boundary",
    "Content-Disposition: form-data; name=`"file`"; filename=`"AssetHandbook.pdf`"",
    "Content-Type: application/octet-stream$LF",
    $fileEnc,
    "--$boundary--$LF"
) -join $LF
$SC = "";
 
$i=1
Do{
    Try{
        $SC=(Invoke-RestMethod -Uri $URL -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines).StatusCode
    }
    catch{
        $SC=($_.Exception.Response.StatusCode.value__)
    }
        
    Write-host($SC) -ForegroundColor Red -BackgroundColor Cyan
    $clipboard = $SC
    $i++
}
Until($SC -eq 429 -or $i -gt 30)
 
Set-Clipboard $clipboard
Start-Sleep -Second 1
Write-host $SC "<----- HTTP Status code" -ForegroundColor Red -BackgroundColor Cyan

以下屏幕截图来自执行 HTTP GET 的不同脚本。这是我期望看到的:

使用上面发布的当前脚本并执行 HTTP POST,这就是我所看到的:

【问题讨论】:

  • 根据文档,Invoke-RestMethod 的可能返回类型包括System.Int64System.StringSystem.Xml.XmlDocument。这些都不包括StatusCode 成员。如果您可以使用 PS 7,则有参数 -StatusCodeVariable
  • @zett42 - 感谢您的提醒。也就是说,我最终选择了来自远程服务器的特定 JSON 响应来做我需要做的事情。如果你把你的评论写成“答案”,我会接受。

标签: powershell loops http foreach


【解决方案1】:

根据docsInvoke-RestMethod可能的输出类型包括System.Int64System.StringSystem.Xml.XmlDocument。这些都不包括StatusCode 成员。

如果您可以使用 PS 7,则有 parameter -StatusCodeVariable。传递此参数时,cmdlet 将给定变量设置为返回后的 HTTP 状态码。

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多