【问题标题】:how to change ReadWriteTimeout for powershell Invoke-WebRequest or Invoke-RestMethod?如何更改 Powershell Invoke-WebRequest 或 Invoke-RestMethod 的 ReadWriteTimeout?
【发布时间】:2017-07-26 21:28:45
【问题描述】:

我们正在尝试使用下面提到的 Rest API 端点通过 PowerShell Invoke-RestMethod 和 Invoke-WebRequest 方法从 Splunk 下载搜索结果(两者都有效)。但是我们的一些搜索运行时间超过 5 分钟,因此 Powershell 的 Invoke-RestMethod 和 Invoke-WebRequest 方法没有返回数据以将其写入本地文件,因此请求恰好在 5 分钟后超时。我们想为Powershell的Invoke-RestMethod和Invoke-WebRequest方法增加https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.readwritetimeout(v=vs.110).aspx页面上提到的ReadWriteTimeout,可以吗?

Splunk Rest API 端点: https://${server}:port/services/search/jobs/export

注意:- 此 Splunk 端点仅在完成搜索后才开始流式传输结果。

许多人可能会建议使用另一个 CURL 客户端来进行此 Rest API 调用,我们已经尝试过,并且它正在工作,因为 Cygwin 中的 curl 等其他客户端没有默认的 5 分钟 ReadWriteTimeout。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    不,但您可以直接使用您引用的 HttpWebRequest 对象。

    我建议您编写自己的函数 Invoke-MyRestMethod,该函数使用该类以及 R/W 超时参数和您需要的任何其他参数。

    【讨论】:

      【解决方案2】:

      MSDN page on Invoke-WebRequest 表示有一个-TimeoutSec 参数采用int32Invoke-RestMethod 似乎支持相同的参数。

      【讨论】:

      • 与 ReadWriteTimeout 不同。
      • @user6539841 - 那么,我假设您已经尝试过了,设置了高于 300 的超时时间,但在 300 秒(5 分钟)后仍然失败?
      • 是的,我们有,但每次都失败了,因为它的意义完全不同。我们有另一个搜索只运行了 2 分钟,但生成了太多数据,因此下载大约需要 30 分钟,并且 REST API 调用保持连接,在这种情况下没有超时。但是,我们遇到问题的搜索连续运行了 15 分钟,并且由于数据流直到前 5 分钟才开始,我们遇到了 Powershell 的默认设置 ReadWriteTimeout。我在 cygwin 上使用 curl 尝试了相同的 REST 调用,对于耗时超过 5 分钟的搜索,它运行良好
      • 即使在 30 分钟下载期间也没有超时,因为 PowerShell 中 -TimeoutSec 的默认值是不确定的。
      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多