`
lupingui
  • 浏览: 159234 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Objective-C NSURL 访问需要认证的网页 Basic Authentication

阅读更多

访问某些网页可能需要认证,比如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的几个Demo

    在这些平台上,Objective-C被用于构建各种类型的应用程序,包括那些需要进行网络通信的。Socket编程是实现网络通信的基础,它允许设备之间的数据传输。本篇文章将深入探讨Objective-C如何实现Socket编程,并结合...

    Objective-C语法快速参考

    Objective-C是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能。由于Objective-C是苹果公司在其操作系统(如macOS和iOS)上开发应用的主要语言之一,因此对于想要从事苹果平台软件开发的开发者来说...

    Objective-C语法总结

    Objective-C是一种面向对象的编程语言,它在C语言的基础上扩展了一些特性,主要应用于Apple的iOS和macOS平台上的软件开发。XCode是Apple提供的一款集成开发环境(IDE),集成了代码编辑器、编译器、调试工具等,是...

    Objective-C - NSURLSession实现短信验证码注册登录完整示例:Objective-C - NSURLSession.m和附件说明

    在iOS开发中,Objective-C是主要的编程语言之一,用于构建原生的移动应用程序。`NSURLSession`是苹果提供的一个强大的网络编程接口,用于处理HTTP和其他网络协议的数据传输。本示例将详细介绍如何使用Objective-C和...

    Programming in Objective-C 4th Edition

    《Objective-C编程》第4版是一本专注于Objective-C语言的书籍,Objective-C是一种面向对象的编程语言,广泛用于苹果公司的操作系统和应用开发中。本书主要面向那些已经具备一定编程基础,并希望深入学习Objective-...

    IOS WEBSOCKET Objective-C实现

    虽然Objective-C是主讲内容,但如果你需要在C语言环境中实现WebSocket,可以考虑使用libwebsockets库,这是一个轻量级的C库,支持WebSocket服务器和客户端的开发。实现原理与上述Objective-C类似,只是语法和API略有...

    Objective-C并发编程:NSOperation与NSOperationQueue的精妙协同

    ### Objective-C并发编程:深入解析NSOperation与NSOperationQueue #### 一、Objective-C简介及其特点 Objective-C 是一种基于 C 语言的面向对象编程语言,最初由 Brad Cox 和 Tom Love 在 1980 年代早期设计,...

    Objective-C 代码与Javascript 代码相互调用实例

    Objective-C作为iOS开发中较为传统的编程语言,在与网页的交互中常常需要调用JavaScript代码,同样JavaScript也可能需要调用Objective-C代码。这种相互调用技术在提供更为丰富的用户体验和功能实现方面发挥着重要...

    由C#转Object-C开发入门基础

    在开始之前,我们需要澄清几个术语:XCode、Objective-C 和 Cocoa。 - **XCode**:这是一款集成开发环境(IDE),类似于微软的Visual Studio。它提供了编译、调试和构建应用程序所需的所有工具。 - **Objective-C**...

    ObjFW:[Official Mirror]用于Objective-C语言的可移植框架

    ObjFW,全称为Objective-Framework,是一个开源的、可移植的框架,专为Objective-C编程语言设计。这个框架的目标是为开发者提供一个轻量级、高效且与Apple的Foundation框架兼容的解决方案,使得Objective-C程序员...

    NSURL-QueryDictionary:只是一个简单的NSURL类别,使使用URL查询更加愉快

    NSURL-QueryDictionary 只是一些简单的NSURL , NSString和NSDictionary类别,使使用URL查询变得更加愉快。 -[NSURL uq_queryDictionary]提取URL的查询字符串作为键/值对。 -[NSURL uq_...

    PIPTest.zip

    在Objective-C中实现PiP功能,首先需要理解苹果提供的AVFoundation框架,它是iOS多媒体处理的核心。AVPlayer和AVPlayerLayer是AVFoundation中的关键组件,用于播放视频。当用户希望开启PiP模式时,我们可以创建一个...

    Objective -C类库 NS

    Object C 提供的所有类,方法,协议,属性

    OC-WKWebView(Html修改字体颜色)

    在iOS开发中,WKWebView是...WKWebView还支持JavaScript交互,允许你从Objective-C代码与网页内容进行通信,实现更多定制功能。记得在使用WKWebView时,要遵循苹果的安全指南,避免加载不安全的或不受信任的网页内容。

    asihttprequest使用指南

    ```objective-c ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; [request startSynchronous]; ``` ##### 1.2 创建一个异步请求 异步请求不会阻塞线程...

    DatabaseKit:Objective-C 数据库抽象框架

    DatabaseKit 是一个令人难以置信的直接使用 Objective-C 的数据库框架。 特征: 支持 SQLite,但其构建是为了方便添加对其他 SQL 数据库的支持,只需子类DBConnection 。 查询组合完全在 Objective-C 中完成。 ...

    iOS NSString详细操作

    ```objective-c NSString *aString = @"我是个NS字符串!"; ``` - **初始化方法**:通过`[[NSString alloc] initWithFormat:]`等方法创建`NSString`对象,此时需要手动管理内存。 ```objective-c NSString *a...

    ASIHTTPRequest_详解.pdf

    新版本更进一步引入了Objective-C闭包Block的支持,使得代码编写更加简洁高效。 #### 二、核心功能与API用法 ##### 1. 同步请求 同步请求会导致当前线程阻塞,直至请求完成。在用户界面线程中使用可能会导致应用...

Global site tag (gtag.js) - Google Analytics