调用URLSession:didReceiveChallenge:completionHandler:
的{{1}}方法时?当我收到403状态代码的回复时,它是否被调用了?
如果我要在授权后更改第二次请求的请求正文,我可以使用此委托方法进行授权吗? (我应该改变NSURLSessionDelegate
)
@"ticket"
答案 0 :(得分:2)
NSURLSession的代表中有两个不同的挑战/响应处理程序。您正在实施的第一个是会话级别,基本上处理服务器级别的身份验证。
- 对于会话级别的挑战 - NSURLAuthenticationMethodNTLM,NSURLAuthenticationMethodNegotiate,NSURLAuthenticationMethodClientCertificate或NSURLAuthenticationMethodServerTrust - NSURLSession对象调用会话委托的URLSession:didReceiveChallenge:completionHandler:方法。如果您的应用程序未提供会话委托方法,则NSURLSession对象将调用任务委托的URLSession:task:didReceiveChallenge:completionHandler:处理质询的方法。
- 对于非会话级别的挑战(所有其他挑战),NSURLSession对象调用会话委托的URLSession:task:didReceiveChallenge:completionHandler:处理挑战的方法。如果您的应用程序提供了会话委托,并且您需要处理身份验证,那么您必须在任务级别处理身份验证,或者提供一个显式调用每会话处理程序的任务级处理程序。对于非会话级别的挑战,不会调用会话委托的URLSession:didReceiveChallenge:completionHandler:方法。
因此,您可能希望通过在委托对象中添加对NSURLSessionTaskDelegate的协议支持来处理任务级别身份验证,并在任务级别提供处理程序,即URLSession(_:task:didReceiveChallenge:completionHandler:)
。
有关详细信息,请转到此link