首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当响应时间(而不是名称解析)超过x时,是否有一种方式来结束调用-WebRequest?

当响应时间(而不是名称解析)超过x时,是否有一种方式来结束调用-WebRequest?
EN

Stack Overflow用户
提问于 2019-07-31 08:38:20
回答 2查看 1.1K关注 0票数 1

我想运行一个脚本来检查网站响应时间(而不是DNS名称解析时间),当响应时间超过60秒时抛出一个异常。

我使用httpstat.us/200?sleep=70000 (即等待70秒)进行测试,但是找不到解决方案,因为-TimeoutSec只检查名称解析时间。我不明白在这种情况下创造工作或计时器有什么帮助。我在另一个论坛尝试了下面的代码,但是(当然)不起作用,因为它等待命令完成。60秒后我怎么能打断/中断它呢?

代码语言:javascript
复制
$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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-31 08:47:51

-TimeoutSec不检查DNS解析时间。文档警告道,DNS解析可能需要15秒才能返回结果或超时。这意味着,由于DNS的存在,将-TimeoutSec设置为小于15秒的值可能会有效地扩展到15。

-TimeoutSec 指定请求超时前可以挂起多长时间。输入一个以秒为单位的值。默认值0指定无限期超时. 域名系统(DNS)查询可能需要15秒才能返回或超时。如果请求包含需要解析的主机名,并且将TimeoutSec设置为大于零但小于15秒的值,则抛出WebException之前可能需要15秒或更长时间,并且请求超时。

60秒的值远远超过了这个限制,所以

代码语言:javascript
复制
Invoke-WebRequest -Uri $url -TimeoutSec $Duration

应该能正常工作。

票数 0
EN

Stack Overflow用户

发布于 2019-07-31 08:48:27

如果同时设置了MaxServicePointIdleTime-TimeOutSec参数,则在此示例中的第二秒钟后将中止所请求的参数:

代码语言:javascript
复制
[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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57286563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档