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