NSURLSession HTTP基本身份验证委托不起作用

时间:2015-11-09 01:38:42

标签: ios nsurlsession

我将NSURLConnection与挑战委托一起使用,并且有效。 我现在将我的代码迁移到会话,并且没有调用挑战。 在服务器端,我看到401响应,但没有代表调用。

@interface MyDelegate : NSObject<NSURLSessionDelegate, NSURLSessionTaskDelegate>

@end

@implementation MyDelegate
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
// Break point here NOT called
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
    // Break point here NOT called

}
@end

int main(int argc, char * argv[]) {
    @autoreleasepool {
        //return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8000/upload/123"];
        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
        req.HTTPMethod = @"PUT";
        [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSError *err;
        NSURLResponse *resp;
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:[MyDelegate new] delegateQueue:nil];
        [[session uploadTaskWithRequest:req fromData:[NSData new]]resume];
        sleep(10000);
    }
}

我错过了什么吗?

以防万一:请不要建议我手动创建Basic HTTP auth标头,我想使用委托。

PS:由于代表未保留在会话中,它可能是我的代表吗? 我会尝试使它静止,然后。

1 个答案:

答案 0 :(得分:0)

我认为NSURLSession请求必须在运行循环中运行。但是,我不确定这一点。

当然,如果你在一个真实的应用程序中这样做,你可能不希望用睡眠调用阻止主线程。这也可能是问题的一部分。