【问题标题】:Connect and Complete timeouts for NSMutableURLRequestNSMutableURLRequest 的连接和完成超时
【发布时间】:2017-03-17 17:20:22
【问题描述】:

我们正在将 CURL HTTP Get 请求转换为本地 IOS 代码。使用 CURL,我们可以设置两个不同的超时时间 - CURLOPT_CONNECTTIMEOUT - 如果无法连接,呼叫失败前多长时间,以及 CURLOPT_TIMEOUT - 如果尚未检索到所有数据,呼叫失败前多长时间。如果连接失败,我们希望它很快返回(10 秒),但我们可能会在慢速连接上下载大块数据,因此我们需要非常大的完成超时(5 分钟)。

我们如何使用 NSMutableURLRequest 设置不同的超时时间

目前我们正在像这样设置单个超时

[urlRequest setTimeoutInterval:30.0f]

有没有办法像 CURL 那样设置两个单独的超时?我们目前正在设置哪个超时?连接超时或完成。

谢谢

肖恩

【问题讨论】:

    标签: ios curl nsmutableurlrequest


    【解决方案1】:

    这是一个非常好的问题。我不清楚上面的documentation

    如果在连接尝试期间请求保持空闲的时间超过超时间隔,则认为该请求已超时。默认超时间隔为 60 秒。

    我确实在 Apple 开发者论坛中找到了 helpful post,一位 Apple 员工解释道:

    timeoutInterval 属性等价于 timeoutIntervalForRequest 属性。

    他在NSURLSessionConfiguration 上引用property,可以附加到NSURLSession。如果设置NSURLRequesttimeoutInterval,它将用作配置上timeoutIntervalForRequest 的值。该属性的文档确实提供了一些见解:

    请求超时间隔控制任务的时长(以秒为单位) 在放弃之前应该等待额外的数据到达。计时器 每当有新数据到达时,与此值关联的值就会被重置。什么时候 请求计时器达到指定的时间间隔而没有收到任何 新数据,它会触发超时。

    默认值为60

    据此看来,这个值其实都不是!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2013-05-23
      • 2011-02-14
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多