使用HttpWebRequest / Invoke-WebRequest的请求的最长时间?

时间:2017-11-24 21:51:47

标签: .net powershell

我已经摆弄了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分钟)。没人知道该怎么办?

我已经设置了这个场景,因为我有一个我需要测试的网站,响应时间很长。

1 个答案:

答案 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中托管它,则不会有这个限制。