我在请求中添加了一个Basic HTTP Authorization Header,但需要将authString编码为Base64。有关信息,由于产生了过多的401错误,我无法使用didReceiveAuthenticationChallenge。
以下代码在iOS 4.2中运行良好,但在iOS 3.2上无效(我想支持此功能)。
NSString *authString = [[[NSString stringWithFormat:@"%@:%@", user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];
authString = [NSString stringWithFormat: @"Basic %@", authString];
NSMutableURLRequest* request =
[[NSMutableURLRequest alloc] initWithURL: url
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval: 30];
[request setValue: authString forHTTPHeaderField: @"Authorization"];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
authString = [NSString stringWithFormat: @"Basic %@", authString];
NSMutableURLRequest* request =
[[NSMutableURLRequest alloc] initWithURL: url
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval: 30];
[request setValue: authString forHTTPHeaderField: @"Authorization"];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
在上面代码的第一行,我收到警告,NSData不会响应'base64Encoding'。
所以我从这里下载了自定义类NSData + Base64: http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html
但是......我不知道如何使用这个类转换我的NSString(authString)。请帮帮忙?!
我认为以下代码行应该修复:
但我得到以下信息:
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSConcreteMutableData base64EncodedString]:无法识别的选择器发送到实例
我是否错过了导入或其他什么?
P.S。这是我在这里的第一个问题,所以对我来说很容易!!
答案 0 :(得分:2)
NSString
有-dataUsingEncoding:
方法,可用于将NSString
个实例转换为NSData
个实例。之后,您可以使用MG的Base64类别。
答案 1 :(得分:0)
您是否创建了类别以在NSData类中使用BASE64Encoding方法?在这里我做了一个简单创建类别的教程,基本上是现有类的修改,在这种情况下NSData:http://www.donttouchmycode.com/objective-c-class/extending-an-existing-class-with-categories我希望这可以帮助你。