NSURLSessionTaskDelegate

- URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:

客户端告知服务器端需要HTTP重定向。
此方法只会在default session或者ephemeral session中调用,而在background session中,session task会自动重定向。

- URLSession:task:didReceiveChallenge:completionHandler:


NSURLSessionDelegate中的

  • URLSession:didReceiveChallenge:completionHandler:

该方法是处理task-level的认证挑战。在NSURLSessionDelegate中提供了一个session-level的认证挑战代理方法。该方法的调用取决于认证挑战的类型:

对于session-level的认证挑战,挑战类型有 
NSURLAuthenticationMethodNTLM, 
NSURLAuthenticationMethodNegotiate, 
NSURLAuthenticationMethodClientCertificate,
或NSURLAuthenticationMethodServerTrust — 此时session会调用其代理方法URLSession:didReceiveChallenge:completionHandler:。
如果你的app没有提供对应的NSURLSessionDelegate方法,
那么NSURLSession对象就会调用URLSession:task:didReceiveChallenge:completionHandler:
来处理认证挑战。
对于non-session-level的认证挑战,NSURLSession对象调用URLSession:task:didReceiveChallenge:completionHandler:来处理认证挑战。如果你在app中使用了session代理方法,而且也确实要处理认证挑战这个问题,那么你必须还是在task level来处理这个问题,或者提供一个task-level的handler来显式调用每个session的handler。
而对于non-session-level的认证挑战,session的delegate中的URLSession:didReceiveChallenge:completionHandler:方法不会被调用。

- URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:

周期性地通知代理发送到服务器端数据的进度。

- URLSession:task:needNewBodyStream:

当一个session task需要发送一个新的request body stream到服务器端的时候,调用该代理方法。

该代理方法会在下面两种情况被调用:
如果task是由uploadTaskWithStreamedRequest:创建的,那么提供初始的request body stream时候会调用该代理方法。

因为认证挑战或者其他可恢复的服务器错误,而导致需要客户端重新发送一个含有body stream的request,这时候会调用该代理。

URLSession:task:didCompleteWithError:

告知该session task已经完成了数据传输任务

你可能感兴趣的:(NSURLSessionTaskDelegate)