Nói chung tôi muốn chỉ "cháy và quên" bằng phương thức lớp sendAsynchronousRequest của NSURL bằng cách sử dụng khối xử lý hoàn thành nhưng có vẻ như đó không phải là tùy chọn khi cần xác thực.Xác thực bằng NSURLConnection sendAsynchronousRequest với trình xử lý hoàn thành
Khi sử dụng một yêu cầu phong cách xử lý hoàn thành như thế này:
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mysite.com/"]]
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//Do Stuff
}];
cách thích hợp để xử lý xác thực là gì? Tôi có cần phân bổ và khởi động NSURLConnection và thiết lập một đại biểu thay vì sử dụng kiểu phương thức lớp này không? Tôi nghĩ rằng tôi hiểu làm thế nào để xác thực một cách chính xác với chức năng đại biểu nhưng tôi đang cố gắng tìm ra nếu tôi có thể bao gồm trong khối completionHandler hoặc nếu có một cách tốt hơn để làm điều này.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] > 0) {
NSLog(@"Authentication Failure");
[connection cancel];
}
else
{
NSURLCredential *credential = [NSURLCredential credentialWithUser:self.username
password:self.password
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
}
'AFBase64EncodedStringFromString' là một chức năng riêng và không được sử dụng bởi chính nó. Thay vào đó, bạn có thể thực hiện 'AFHTTPClient setAuthorizationHeaderWithUsername: password:' và tạo một 'NSURLRequest' với' -requestWithMethod: path: parameters: '(hoặc chỉ cần sao chép phần đầu ủy quyền từ yêu cầu được tạo ra) – mattt
Phải có cách để đạt được điều này mà không cần Thư viện của bên thứ ba ... – dan