ios7 AFNetworking 2.0 और HTTP बेसिक प्रमाणीकरण




http-authentication afnetworking-2 (3)

जैसा कि @gimenete में मल्टीपार्ट अनुरोधों का उल्लेख किया गया है जब @titaniumdecoy क्रेडेंशियल दृष्टिकोण का उपयोग करते समय यह विफल हो जाएगा क्योंकि इसे चुनौती ब्लॉक में लागू किया गया है और AFNetworking के वर्तमान संस्करण में इसके साथ एक समस्या है। क्रेडेंशियल दृष्टिकोण का उपयोग करने के बजाय आप प्रमाणीकरण को NSMutableRequest हैडर में एम्बेड कर सकते हैं

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"PUT"  URLString:path parameters:myParams constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
                    [formData appendPartWithFileData:imageData name:imageName fileName:imageName mimeType:@"image/jpeg"];
            } error:&error];    
    NSString *authStr = [NSString stringWithFormat:@"%@:%@", [self username], [self password]];
    NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
    NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedString]];
    [request setValue:authValue forHTTPHeaderField:@"Authorization"];

जहां आपको NSData + Base64.h और .m फ़ाइल जैसे मैट गलाघरों से पहले ARC BASE64 समाधान के लिए एक तीसरी पार्टी BASE64 एन्कोडिंग लाइब्रेरी का उपयोग करने की आवश्यकता होगी

उपयोग करने के लिए AFN Networking 2.0 पर AFHTTPClient नहीं मिल सकता है:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]];

[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];

इसे AFNetworking 2.0 पर कैसे प्रबंधित किया जाना चाहिए?


AFNetworking 2.0 नए आर्किटेक्चर अनुरोध और पार्सिंग प्रतिक्रियाओं को बनाने के लिए धारावाहिकों का उपयोग करते हैं। प्राधिकरण शीर्ष लेख को सेट करने के लिए, आपको पहले अनुरोध ऑपरेशन प्रबंधक को इनिशियलाइज़ करना चाहिए जो AFHTTPClient की जगह लेता है, एक सीरियल बनाने वाला है और फिर हेडर सेट करने के लिए समर्पित विधि को कॉल करें।

उदाहरण के लिए आप कोड बन जाएंगे:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"];

आपको AFNetworking के संस्करण 2.0 के साथ आने वाली नई अवधारणाओं को समझने के लिए documentation और माइग्रेशन गाइड को पढ़ना चाहिए।


यहाँ NSNLCredential का उपयोग करके AFNetworking 2.0 के साथ बुनियादी HTTP प्रमाणीकरण करने का एक उदाहरण है। AFHTTPRequestSerializer setAuthorizationHeaderFieldWithUsername:password: विधि का उपयोग करने पर इस दृष्टिकोण का लाभ यह है कि आप स्वचालित रूप से चाबी का गुच्छा में उपयोगकर्ता नाम और पासवर्ड को persistence: संग्रहीत कर सकते हैं: NSURLCredential का पैरामीटर। ( यह जवाब देखें।)

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSURLCredential *credential = [NSURLCredential credentialWithUser:@"user" password:@"passwd" persistence:NSURLCredentialPersistenceNone];

NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:@"https://httpbin.org/basic-auth/user/passwd" parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCredential:credential];
[operation setResponseSerializer:[AFJSONResponseSerializer alloc]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Failure: %@", error);
}];
[manager.operationQueue addOperation:operation];






afnetworking-2