访问某些网页可能需要认证,比如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用户信息。
分享到:
相关推荐
在这些平台上,Objective-C被用于构建各种类型的应用程序,包括那些需要进行网络通信的。Socket编程是实现网络通信的基础,它允许设备之间的数据传输。本篇文章将深入探讨Objective-C如何实现Socket编程,并结合...
Objective-C是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能。由于Objective-C是苹果公司在其操作系统(如macOS和iOS)上开发应用的主要语言之一,因此对于想要从事苹果平台软件开发的开发者来说...
Objective-C是一种面向对象的编程语言,它在C语言的基础上扩展了一些特性,主要应用于Apple的iOS和macOS平台上的软件开发。XCode是Apple提供的一款集成开发环境(IDE),集成了代码编辑器、编译器、调试工具等,是...
在iOS开发中,Objective-C是主要的编程语言之一,用于构建原生的移动应用程序。`NSURLSession`是苹果提供的一个强大的网络编程接口,用于处理HTTP和其他网络协议的数据传输。本示例将详细介绍如何使用Objective-C和...
《Objective-C编程》第4版是一本专注于Objective-C语言的书籍,Objective-C是一种面向对象的编程语言,广泛用于苹果公司的操作系统和应用开发中。本书主要面向那些已经具备一定编程基础,并希望深入学习Objective-...
虽然Objective-C是主讲内容,但如果你需要在C语言环境中实现WebSocket,可以考虑使用libwebsockets库,这是一个轻量级的C库,支持WebSocket服务器和客户端的开发。实现原理与上述Objective-C类似,只是语法和API略有...
### Objective-C并发编程:深入解析NSOperation与NSOperationQueue #### 一、Objective-C简介及其特点 Objective-C 是一种基于 C 语言的面向对象编程语言,最初由 Brad Cox 和 Tom Love 在 1980 年代早期设计,...
Objective-C作为iOS开发中较为传统的编程语言,在与网页的交互中常常需要调用JavaScript代码,同样JavaScript也可能需要调用Objective-C代码。这种相互调用技术在提供更为丰富的用户体验和功能实现方面发挥着重要...
在开始之前,我们需要澄清几个术语:XCode、Objective-C 和 Cocoa。 - **XCode**:这是一款集成开发环境(IDE),类似于微软的Visual Studio。它提供了编译、调试和构建应用程序所需的所有工具。 - **Objective-C**...
ObjFW,全称为Objective-Framework,是一个开源的、可移植的框架,专为Objective-C编程语言设计。这个框架的目标是为开发者提供一个轻量级、高效且与Apple的Foundation框架兼容的解决方案,使得Objective-C程序员...
NSURL-QueryDictionary 只是一些简单的NSURL , NSString和NSDictionary类别,使使用URL查询变得更加愉快。 -[NSURL uq_queryDictionary]提取URL的查询字符串作为键/值对。 -[NSURL uq_...
在Objective-C中实现PiP功能,首先需要理解苹果提供的AVFoundation框架,它是iOS多媒体处理的核心。AVPlayer和AVPlayerLayer是AVFoundation中的关键组件,用于播放视频。当用户希望开启PiP模式时,我们可以创建一个...
Object C 提供的所有类,方法,协议,属性
在iOS开发中,WKWebView是...WKWebView还支持JavaScript交互,允许你从Objective-C代码与网页内容进行通信,实现更多定制功能。记得在使用WKWebView时,要遵循苹果的安全指南,避免加载不安全的或不受信任的网页内容。
```objective-c ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; [request startSynchronous]; ``` ##### 1.2 创建一个异步请求 异步请求不会阻塞线程...
DatabaseKit 是一个令人难以置信的直接使用 Objective-C 的数据库框架。 特征: 支持 SQLite,但其构建是为了方便添加对其他 SQL 数据库的支持,只需子类DBConnection 。 查询组合完全在 Objective-C 中完成。 ...
```objective-c NSString *aString = @"我是个NS字符串!"; ``` - **初始化方法**:通过`[[NSString alloc] initWithFormat:]`等方法创建`NSString`对象,此时需要手动管理内存。 ```objective-c NSString *a...
新版本更进一步引入了Objective-C闭包Block的支持,使得代码编写更加简洁高效。 #### 二、核心功能与API用法 ##### 1. 同步请求 同步请求会导致当前线程阻塞,直至请求完成。在用户界面线程中使用可能会导致应用...