我已经摆弄了System.Net.HttpWebRequest和Invoke-WebRequest(我知道它下面是相同的代码)并且在以下场景中都给出了500状态:
$response = Invoke-WebRequest 'https://httpstat.us/200?sleep=270000' -TimeoutSec 360000
这怎么可能? httpstat.us显然设置为仅等待4.5分钟。超时超过了,但我得到的只是:
Invoke-WebRequest:500 - 请求超时。 Web服务器无法在指定时间内响应。 在行:1 char:13 + $ response = Invoke-WebRequest'https://httpstat.us/200?sleep=270000'... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-WebRequest],WebExc 主器件接收 + FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
在我看来,请求的最大超时时间(大约3-4分钟)。没人知道该怎么办?
我已经设置了这个场景,因为我有一个我需要测试的网站,响应时间很长。
答案 0 :(得分:0)
Blogrbeard在对该问题的评论中提供了关键指针:
https://httpstat.us本身意外超时,因为在撰写本文时, 实际最大值。睡眠时间似乎是3分钟。和50秒(230秒,即以毫秒为单位,作为查询字符串的一部分:?sleep=230000
),而不是5分钟。 记录。
?sleep=270000
- 4.5分钟。 - 因此价值太高了。
因此,Invoke-WebRequest
在这里是无可指责的 - 它的-TimeoutSecs
值永远不会发挥作用,甚至完全省略-TimeoutSecs
(即,根本没有指定超时)会产生相同的结果:
PS> (Measure-Command {
Invoke-WebRequest https://httpstat.us/200?sleep=270000 2>&1 | Out-Default
}).TotalSeconds
Invoke-WebRequest : 500 - The request timed out. ...
...
230.57306
更新:正如turns out一样,它是 Azure - 在撰写本文时正在托管https://httpstat.usis - 这是强加的230秒的限制:
使用托管实例时,超时实际上是230秒,这是Azure WebApp允许的最大超时(请参阅this post)。 如果您自己在IIS / IIS Express中托管它,则不会有这个限制。