NSMutableURLRequest 的连接和完成超时

Connect and Complete timeouts for NSMutableURLRequest

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

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

目前我们是这样设置单次超时的

[urlRequest setTimeoutInterval:30.0f]

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

谢谢

肖恩

这真是个好问题。我不清楚上面的documentation

If during a connection attempt the request remains idle for longer than the timeout interval, the request is considered to have timed out. The default timeout interval is 60 seconds.

我确实在 Apple 开发者论坛上找到了这个 helpful post,一位 Apple 员工解释说:

The timeoutInterval property is equivalent to timeoutIntervalForRequest property.

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

The request timeout interval controls how long (in seconds) a task should wait for additional data to arrive before giving up. The timer associated with this value is reset whenever new data arrives. When the request timer reaches the specified interval without receiving any new data, it triggers a timeout.

The default value is 60.

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