【发布时间】:2021-05-18 17:10:56
【问题描述】:
我们在 PowerShell 脚本中使用 Invoke-RestMethod 来调用具有可变长度运行时的 GET 方法端点。有些电话可能会在几秒钟后返回,有些可能需要长达 20 分钟。我们已通过 -TimeoutSec 参数设置了 50 分钟的通话超时时间。
只需几秒钟的调用就可以正常返回并输出预期的响应。更长的调用(例如 5 分钟)永远不会返回,并且 Invoke-RestMethod 命令会用完整个 50 分钟超时,尽管我们在 Web 服务器日志中确认服务器早已返回 200 OK。
try
{
$Url = "https://example.com/task" # GET
$Timeout = 3000 # 50 minute timout
$Response = Invoke-RestMethod $Url -TimeoutSec $Timeout
Write-Host $Response
}
catch
{
Write-Host $_.Exception
}
端点上没有身份验证。 PowerShell 版本为 7。脚本在托管被调用 Web 服务器的同一台机器上运行。
这是我们不知道的Invoke-RestMethod 的配置问题吗?我们在使用基本相同的脚本时遇到了与 Invoke-WebRequest 类似的问题。
【问题讨论】:
-
这可能与较低层有关(与 PowerShell 无关)。例如,防火墙使用状态检查来打开连接端口,以便答案可以通过。端口不会永远开放。它们将在连接关闭后立即关闭,或者在超时后可能就是这种情况。
Invoke-WebRequest肯定不能修改这样的超时。并且可能会有更多具有类似超时机制的服务。
标签: powershell invoke-webrequest invoke-restmethod