使用NSURLSession委托进行授权

阿列克谢·阿里宾(Alexey Alybin)

什么时候URLSession:didReceiveChallenge:completionHandler:方法NSURLSessionDelegate被调用?当我收到403状态代码的响应时是否调用了它?

如果我应该在授权后更改第二个请求的请求主体,可以使用此委托方法进行授权吗?(我应该改变@"ticket"

NSURLSession *session = [NSURLSession sharedSession];
NSError *error;
NSDictionary *mapData = @{
                          @"userIdentity": @{
                                  @"ticket": [SecretStorage sharedInstance].ticket,
                                  @"hotelId": [SecretStorage sharedInstance].hotelId,
                                  @"language": @"ru"
                                  }
                          };
NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"example.com"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.f];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                                                NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
                                                NSLog(@"%@", json);
                                            }];
[dataTask resume];
用户名

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:)

欲了解更多信息,请访问此链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用NSURLSession和NSURLCache进行缓存。无法运作

来自分类Dev

如何使用iOS 7的NSURLSession及其委托方法系列接受自签名SSL证书以进行开发?

来自分类Dev

未调用NSURLSession委托方法

来自分类Dev

使用NSURLSession进行网络连接与后台上传

来自分类Dev

ClaimsAuthorizationManager-使用请求参数进行授权

来自分类Dev

使用NSURLSession进行单元测试

来自分类Dev

NSURLSession委托与completionHandler

来自分类Dev

NSURLSession委托和完成处理程序

来自分类Dev

使用从Google API返回的数据进行授权

来自分类Dev

使用委托在表单之间进行通信

来自分类Dev

在Swift中使用容器视图进行委托

来自分类Dev

如何使用委托进行UI拖动?

来自分类Dev

C#使用委托进行跨线程的麻烦

来自分类Dev

使用请求数据进行剪影授权

来自分类Dev

使用委托进行Rails ActiveModel查找

来自分类Dev

如何使用__getattr__委托方法进行属性分配?

来自分类Dev

使用Api网关和Lambda进行授权

来自分类Dev

委托代表进行通知

来自分类Dev

使用表达式和动作委托进行决策结构

来自分类Dev

我应该使用委托进行块返回吗?

来自分类Dev

使用NSURLSession进行网络连接与后台上传

来自分类Dev

NSURLSession委托与completionHandler

来自分类Dev

可以复制iOS的NSURLsession委托类

来自分类Dev

在iOS 8 / Swift中使用委托进行AppLovin集成

来自分类Dev

使用NSURLSession进行POST,发布变量的正确方法是什么?

来自分类Dev

结合Python进行委托

来自分类Dev

未调用NSURLSession委托

来自分类Dev

将委托作为参数传递给NSURLSession

来自分类Dev

如何使用Rails实施委托授权模型?