我想使用AFNetworking进行批处理操作.我想下载3个json文件.
如何使用AFHTTPRequestOperation添加基本身份验证?
NSMutableArray *mutableOperations = [NSMutableArray array]; for (NSString *fileURL in filesToDownload) { NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:fileURL]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,id responSEObject) { NSLog(@"success: %@",operation.responseString); } failure:^(AFHTTPRequestOperation *operation,NSError *error) { NSLog(@"error: %@",operation.responseString); }]; [mutableOperations addObject:operation]; } NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:mutableOperations progressBlock:^(NSUInteger numberOfFinishedOperations,NSUInteger totalNumberOfOperations) { NSLog(@"%d of %d complete",numberOfFinishedOperations,totalNumberOfOperations); } completionBlock:^(NSArray *operations) { NSLog(@"All operations in batch complete"); }]; [[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO];
非常感谢你
解决方法
使用AuthenticationChallengeBlock来处理基本的身份验证挑战.
[operation setAuthenticationChallengeBlock: ^(NSURLConnection *connection,NSURLAuthenticationChallenge *challenge) { NSURLCredential *cred = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession]; [[challenge sender] useCredential:cred forAuthenticationChallenge:challenge]; }];
编辑:
另一个选择是通过请求头中的身份验证.
NSURLMutableRequest *request = [NSURLMutableRequest requestWithURL:[NSURL URLWithString:fileURL]]; NSData* authData = [[[NSString stringWithFormat:@"username:password"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] dataUsingEncoding: NSASCIIStringEncoding]; NSString *finalAuth = [authData base64EncodedString]; finalAuth = [NSString stringWithFormat:@"Basic %@",finalAuth]; [request setValue:finalAuth forHTTPHeaderField:@"Authorization"];
另一个解决方案:
NSURLCredential *credential = [NSURLCredential credentialWithUser:@"login" password:@"password" persistence:NSURLCredentialPersistenceForSession]; [operation setCredential:credential];