2015-08-17 2 views
0

У нас есть веб-служба, которая нуждается в аутентификации для извлечения данных XML. Теперь я пишу код в swift для синтаксического анализа этого XML-запроса. Я использую парсер NSXML. Но он не работает с аутентификацией. Где передать эти полномочия?NSXMLparser с базовой аутентификацией в IOS swift

ответ

0

Использование AFNetworking, использование AFHTTPRequestOperation и может передавать учетные данные.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:@"http://188.40.74.207:8888/api/customer" parameters:nil error:nil]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
//[operation setCredential:credential]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"admin" password:@"admin"]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 


    NSLog(@"Success: %@", [operation responseString]); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Failure: %@", error); 
}]; 
[manager.operationQueue addOperation:operation]; 


[manager GET:@"http://188.40.74.207:8888/api/customer" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    // NSLog(@"JSON: %@", responseObject); 
    arr_Response = responseObject; 
    // NSLog(@"Arr count is: %lu", (unsigned long)arr_Response.count); 
    [SVProgressHUD dismiss]; 

    [self parseData]; 


} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

Или без использования третьей стороны вы можете использовать нижеследующий код.

NSString *authStr = [NSString stringWithFormat:@"%@:%@", [self username], [self password]]; 
NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@",  [authData base64EncodingWithLineLength:80]]; 
[theRequest setValue:authValue forHTTPHeaderField:@"Authorization"]; 

Или вы можете попробовать ниже code.There один метод делегата NSURLConnection

// NSURLConnection Delegates 
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
if ([challenge previousFailureCount] == 0) { 
    NSLog(@"received authentication challenge"); 
    NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"USER" 
                   password:@"PASSWORD" 
                  persistence:NSURLCredentialPersistenceForSession]; 
    NSLog(@"credential created"); 
    [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge]; 
    NSLog(@"responded to authentication challenge");  
} 
else { 
    NSLog(@"previous authentication failure"); 
} 
} 
+0

это не представляется возможным в NSXMLParser, без использования каких-либо внешних библиотек? – PrasadK

+0

попробуйте обновленный. – poojathorat

+0

спасибо !! Мне удалось сделать это быстро, с рефлектором на ваш ответ – PrasadK