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