【发布时间】: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 的不同脚本。这是我期望看到的:
【问题讨论】:
-
根据文档,
Invoke-RestMethod的可能返回类型包括System.Int64、System.String、System.Xml.XmlDocument。这些都不包括StatusCode成员。如果您可以使用 PS 7,则有参数-StatusCodeVariable。 -
@zett42 - 感谢您的提醒。也就是说,我最终选择了来自远程服务器的特定 JSON 响应来做我需要做的事情。如果你把你的评论写成“答案”,我会接受。
标签: powershell loops http foreach