0
A
回答
1
应该有绝对不需要你这样做。在高层次上,Cocoa提供了NSURLConnection,它将执行HTTP认证。如果不是,则CFHTTP API提供较低级别的访问。
1
通过使用Objective-C类别,可以扩展NSString
或NSData
的几种变体。
下面是我已经加入到我的 “实用工具” 工具箱一个例子:
页眉:
#import <Foundation/NSString.h>
@interface NSString (Utilities)
+ (NSString *) base64StringFromData:(NSData *)data;
@end
实现:
#import "NSString+Utilities.h"
@implementation NSString (Utilities)
+ (NSString *) base64StringFromData:(NSData *)data {
static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
if ([data length] == 0)
return @"";
char *characters = malloc((([data length] + 2)/3) * 4);
if (characters == NULL)
return nil;
NSUInteger length = 0;
NSUInteger i = 0;
while (i < [data length]) {
char buffer[3] = {0,0,0};
short bufferLength = 0;
while (bufferLength < 3 && i < [data length])
buffer[bufferLength++] = ((char *)[data bytes])[i++];
// Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];
characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];
if (bufferLength > 1)
characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];
else characters[length++] = '=';
if (bufferLength > 2)
characters[length++] = encodingTable[buffer[2] & 0x3F];
else characters[length++] = '=';
}
return [[[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSUTF8StringEncoding freeWhenDone:YES] autorelease];
}
@end
用法示例:
NSString *inputString = @"myInputString";
NSLog(@"%@", [NSString base64StringFromData:[inputString dataUsingEncoding:NSUTF8StringEncoding]]);
相关问题
- 1. spring security rest java confiigs base auth
- 2. Cocoa MVC实现
- 3. 默/ Base 64编码
- 4. Flexslider Thumb Image Base 64
- 5. Rails number to base 64 or similar
- 6. 无法解码Base-64 URL
- 7. base 64 string to hexa string
- 8. base 64 og:image to facebook share
- 9. Django Rest Framework + Ember.js + rest auth
- 10. Cocoa-touch - 实现文件?
- 11. Connectwise REST API实现
- 12. REST RQL Java实现
- 13. 如何实现double Pow(double base,double ex)
- 14. RFC 4648(Base [16,32,64])在Matlab中的实现
- 15. 在twisted.protocols.ftp.FTP中实现REST?
- 16. Laravel 5:我应该如何实现Auth :: admin()作为Auth :: guest()?
- 17. Base 64编码在HTTP基本认证
- 18. 将NSData转换为Base-64错误
- 19. 无法将nsurl转换为base 64
- 20. 将xamarin.image隐藏成base 64格式
- 21. 从Base 64转换为Java字符串
- 22. base64和MIME base 64有什么区别?
- 23. 用alomofire发送base 64字符串
- 24. android http post base 64 string to .net wcf
- 25. 用base 64替换本地图像
- 26. Base 64解码产生空的
- 27. 从NSData创建base-64字符串
- 28. base 64编码一个表格文件
- 29. 对于BASE-64字符数组
- 30. 将Base 64字符串转换为BytesIO
-1:虽然NSURLConnection和CFHTTPMessageRef具有对base64编码/解码的内部访问权限,但它们使用的是不可访问的。 – 2009-09-09 13:15:53
你能否提供一个同步请求的例子。如果我只使用NSURLConnection类就可以做到这一点,那将是非常好的。 – chaimp 2009-09-09 13:24:43
那么我通常会建议不要使用同步连接。使用异步API并实现-connection:didReceiveAuthenticationChallenge:委托方法。如果您绝对不想使用同步API,请构建URL以使其包含用户名和密码。 – 2009-09-09 18:00:57