访问某些网页可能需要认证,比如JavaEye的Api。
如下方法可以做到访问这样的网页,本信息转自:
http://www.chrisumbel.com/article/basic_authentication_iphone_cocoa_touch
首先需要一个Base64类
@interface Base64 : NSObject {
}
@end
static char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@implementation Base64
+ (unsigned char *)encode:(NSData *) plainText {
unsigned char *outputBuffer = malloc((((([plainText length] % 3) + [plainText length]) / 3) * 4) + 1);
unsigned char *inputBuffer = (unsigned char *)[plainText bytes];
NSInteger i;
NSInteger j = 0;
int remain;
for (i = 0; i < [plainText length]; i += 3){
remain = [plainText length] - i;
outputBuffer[j++] = alphabet[(inputBuffer[i] & 0xFC) >> 2];
outputBuffer[j++] = alphabet[((inputBuffer[i] & 0x03) << 4) | ((remain > 1) ? ((inputBuffer[i+1] & 0xF0) >> 4) : 0)];
if (remain > 1){
outputBuffer[j++] = alphabet[((inputBuffer[i+1] & 0x0F) << 2) | ((remain > 2) ? ((inputBuffer [i+2] & 0xC0) >> 6) : 0)];
}else{
outputBuffer[j++] = '=';
}
if (remain > 2){
outputBuffer[j++] = alphabet[inputBuffer[i+2] & 0x3F];
}else{
outputBuffer[j++] = '=';
}
}
outputBuffer[j] = '0';
return outputBuffer;
}
@end
实现:
NSURL *url = [NSURL URLWithString:@"http://api.iteye.com/api/auth/verify"];
NSString *userName = @"username";
NSString *password = @"password";
NSMutableString *loginString = (NSMutableString*)[@"" stringByAppendingFormat:@"%@:%@", userName, password];
char *encodedLoginData = [Base64 encode:[loginString dataUsingEncoding:NSUTF8StringEncoding]];
NSString *authHeader = [@"Basic " stringByAppendingFormat:@"%@",
[NSString stringWithCString:encodedLoginData
length:strlen(encodedLoginData)]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url
cachePolicy: NSURLRequestReloadIgnoringCacheData
timeoutInterval: 3];
[request addValue:authHeader forHTTPHeaderField:@"Authorization"];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:nil];
NSStringEncoding strEncode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8);
NSString *returnStr = [[NSString alloc] initWithData:returnData encoding:strEncode];
NSLog(@"%@", returnStr);
把username,password替换成真实的JavaEye用户信息。
分享到:
相关推荐
Basic File Operations: NSFileHandle 390 The NSURL Class 395 The NSBundle Class 396 Exercises 397 17 Memory Management and Automatic Reference Counting 399 Automatic Garbage Collection 401 Manual ...
NSURL-QueryDictionary 只是一些简单的NSURL , NSString和NSDictionary类别,使使用URL查询变得更加愉快。 -[NSURL uq_queryDictionary]提取URL的查询字符串作为键/值对。 -[NSURL uq_...
Object C 提供的所有类,方法,协议,属性
DatabaseKit 是一个令人难以置信的直接使用 Objective-C 的数据库框架。 特征: 支持 SQLite,但其构建是为了方便添加对其他 SQL 数据库的支持,只需子类DBConnection 。 查询组合完全在 Objective-C 中完成。 ...
CCAudioPlayer CCAudioPlayer 支持远程和本地音频文件,位于 AVPlayer 之上。 它提供了有用的基本播放器功能。 特征 支持本地和远程媒体。 简单的 API。 处理中断和路由变化。... NSURL *audioURL = [NSURL URL
Objective-C中WebSocket的客户端组件。 它可以与websocket服务通信,而无需使用UIWebView。 用法 NSURL * url = [ NSURL URLWithString: @" ws://your_websocket_service_address " ]; KWSConnection* conn = [...
obj-c-soap11-client 用于在 Objective-C 信封中编码和解码 SOAP 1.1 并发出有效 SOAP 请求的轻量级方法。 需要 fff 引用计数 (ARC) 并且获得 MIT 许可。 NSString* endpoint = @...
羊角面包这个库是一个用 Objective-C 编写并在 MIT 许可下发布的简单排队下载器,所以请随意使用和 PullRequest 任何错误修复或添加的新行为。安装下载源代码,克隆它或子模块它。 您需要的一切都在“Croissant”...
ObjExC 对Objective-C的扩展集,这将使您的编码更加容易。NSObject + ObjExC ex_as:(Class)cls ex_as:(Class)cls strict:(BOOL)strict 允许将对象安全地“投射”到期望的类。 结果id非常好,但必须确保它是一个选定...
写在Objective-c。 安装 可可豆 pod 'DDSlackWebhook' 源文件 您可以将DDSlackWebhook文件夹下的所有文件复制到您的项目中。 用法 // Config - ( BOOL )application:(UIApplication *)application ...
从 JSON 生成 Objective-C 模型并从这些模型生成 JSON。 内置支持: NSString NSArray NSDictionary NSNumber NSDate NSURL 带有NSNull空值 所有原始数据类型( int 、 BOOL 、 float 、 CGFloat等) 真的很...
入门将 SPConnector 文件夹复制到项目中将 /usr/include/libxml2 添加到“标题搜索路径” 将 -lxml2 添加到“其他链接器标志”示例用法将 RequestSubclasses/AFSPURLConnectionOperation 文件复制到项目中 NSURL *...
平台之间的转换,已经平台之间的数据传递,类似淘宝和支付宝之间的转换,在淘宝点击支付转换到支付宝界面
Objective C从远程url下载图片 - (UIImage *) getImageFromURL: (NSString *)theURL { UIImage *theImage = NULL; NSString *imageFileName = [BT_strings getFileNameFromURL:theURL]; NSData *imageData = [...
NSURL+数据添加从内存中的 NSData 对象(具有可选的 MIME 类型)创建 NSURL 的小助手类别。 不要将它用于巨大的斑点; 数据将被编码为字符串,因此对于任何重要任务来说,这既不是高性能的也不是可扩展的(内存)。 ...
如何使用 -> NSURL *url = [NSURL URLWithString:@"link to some file"];LSFastDownloadTask *downloadTask = [[LSFastDownloadTask alloc] initWithURL:url completion:^(NSError *error, NSURL *fileLocation) { ...
react-native-comic-home ...RCTCover.m 支持NSString -> NSURL的中文转换失败 RCTDataManager.m 支持GBK页面 RCTNetworkImageView.m, RCTNetworkImageView.m, image.ios.js 支持onLoadError, onLoadFinish事件 截图
URLMock是一个用于模拟和存根URL请求和响应的Objective-C框架。 它可与在基金会NSURL加载系统上构建的API一起使用,例如NSURLConnection,NSURLSession和AFNetworking,而对代码几乎没有任何更改。 特征 简单,...
是Objective-C的依赖项管理器,它可以自动化并简化在项目中使用JBMessage之类的第三方库的过程。 播客文件 platform :ios , '6.0' pod 'JBMessage' , '~> 1.0' 用法 GET请求 JBMessage *message = [JBMessage ...
这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便: NSURL *url = [NSURL ...