我想运行一个脚本来检查网站响应时间(而不是DNS名称解析时间),当响应时间超过60秒时抛出一个异常。
我使用httpstat.us/200?sleep=70000 (即等待70秒)进行测试,但是找不到解决方案,因为-TimeoutSec只检查名称解析时间。我不明白在这种情况下创造工作或计时器有什么帮助。我在另一个论坛尝试了下面的代码,但是(当然)不起作用,因为它等待命令完成。60秒后我怎么能打断/中断它呢?
$url = 'httpstat.us/200?sleep=70000'
$Duration = 60
$TimeOut = New-TimeSpan -Seconds $Duration
$Sw = [Diagnostics.Stopwatch]::StartNew()
while ($Sw.Elapsed -lt $TimeOut) {
try {
Invoke-WebRequest -Uri $url
} catch [System.Exception] {
# Writing the exception in the console
Write-Host $_.Exception
exit;
}
} #EndOf while ($Sw.Elapsed -lt $TimeOut)发布于 2019-07-31 08:47:51
-TimeoutSec不检查DNS解析时间。文档警告道,DNS解析可能需要15秒才能返回结果或超时。这意味着,由于DNS的存在,将-TimeoutSec设置为小于15秒的值可能会有效地扩展到15。
-TimeoutSec指定请求超时前可以挂起多长时间。输入一个以秒为单位的值。默认值0指定无限期超时. 域名系统(DNS)查询可能需要15秒才能返回或超时。如果请求包含需要解析的主机名,并且将TimeoutSec设置为大于零但小于15秒的值,则抛出WebException之前可能需要15秒或更长时间,并且请求超时。
60秒的值远远超过了这个限制,所以
Invoke-WebRequest -Uri $url -TimeoutSec $Duration应该能正常工作。
发布于 2019-07-31 08:48:27
如果同时设置了MaxServicePointIdleTime和-TimeOutSec参数,则在此示例中的第二秒钟后将中止所请求的参数:
[System.Net.ServicePointManager]::MaxServicePointIdleTime = 1000
$url = 'httpstat.us/200?sleep=70000'
$Duration = 60
$TimeOut=New-TimeSpan -Seconds $Duration
$Sw=[Diagnostics.Stopwatch]::StartNew()
While ($Sw.Elapsed -lt $TimeOut)
{
Try
{
Invoke-WebRequest -Uri $url -TimeoutSec 1
}
Catch [system.exception]
{
# Writing the exception in the console
Write-Host $_.Exception
Break
}
} #EndOf While ($Sw.Elapsed -lt $TimeOut)https://stackoverflow.com/questions/57286563
复制相似问题