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. Backbone.js base 64编码?
- 4. Flexslider Thumb Image Base 64
- 5. 默/ Base 64编码
- 6. Base 64和AES base 64是一样的吗?
- 7. Django Rest Framework + Ember.js + rest auth
- 8. Base-64到Mat转换opencv
- 9. Rails number to base 64 or similar
- 10. base 64 string to hexa string
- 11. html hidden input type - base 64 value
- 12. javascript中的base 64编码
- 13. 无法解码Base-64 URL
- 14. 中的Base-64字符串
- 15. base 64 og:image to facebook share
- 16. Cocoa Webkit WebPolicyDecisionListener错误实现
- 17. Cocoa-touch - 实现文件?
- 18. Erlang SASL AUTH PROTOCOL实现
- 19. 使用Tomcat实现Rest Rest
- 20. django rest auth email validation
- 21. 未定义常量Wiziq :: Auth base :: HMAC
- 22. REST RQL Java实现
- 23. Connectwise REST API实现
- 24. RFC 4648(Base [16,32,64])在Matlab中的实现
- 25. 如何实现double Pow(double base,double ex)
- 26. 亚滨3的RIA base DomainService实现?
- 27. 在x86-64中实现rint()
- 28. 尝试执行vNext部署脚本时出现Base-64错误
- 29. 从Base-64字符串转换为图像时出现异常
- 30. 在twisted.protocols.ftp.FTP中实现REST?
-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