2017-07-13 51 views
0

我需要从一个http头中提取一些数据。在被服务器发送之前,数据已经被base64编码,然后被URL编码。报头是这样的:从http头中提取base64编码数据为NSData或NSString?

<snip> 
Server = Apache; 
"Transfer-Encoding" = Identity; 
"Www-Authenticate" = "Basic realm=\"itYNcEpMfSPfewXAOte3II6xXsM6aNBO197bBuvb9gvWVl7Xo%2FQJ9j9r0hHz0k12xLRqlyvczoCM7kI9q1opHj%2BKYiPz73DqypNFgYGleR3n0bcVTto80Hq55i6nsgPaCnHrWJOdQs1HY%2FzzuK6vbZYAIofiB7VKSwdi00ZmkbQi9Pi05i4lCaCu%2FwV%2FXOOS95oL8TQ%3D\""; 

为了除去URL编码和base64编码,我应该提取原始的报头数据一个NSString或作为NSData的?

NSString* option1 = [header objectForKey: @"Www-Authenticate"]; 
NSData* option2 = [header objectForKey: @"Www-Authenticate"]; 

重要的是选择其中一个,还是可以同时使用两个选项? (注意,我不是问如何从Base64进行URL编码和解码,我问的起点应该是NSString还是NSData以及为什么,或者没关系)。

回答

0

base64这是字符串,您可以将其转换为NSData。

NSString* option1 = [header objectForKey: @"Www-Authenticate"]; 
NSData *data = [NSData dataFromBase64String:option1]; 
-2
- (NSString*)encodeTo64:(NSString*)fromString 
{ 
    NSData *plainData = [fromString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *base64String; 
    if ([plainData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) { 
     base64String = [plainData base64EncodedStringWithOptions:kNilOptions]; // iOS 7+ 
    } else { 
     base64String = [plainData base64Encoding];        // pre iOS7 
    } 


    return base64String; 
}