IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何将TTURLRequest和OAuthConsumer搭配使用

某人的栖息地 2011-07-05 23:16:59 累计浏览 2,738 次
本机暂存

TTURLRequest是three20开发框架提供的一个url请求类,它是NSURLRequest类的扩展,有如下优点:

  • post数据方便,只需要构建一个参数的dictionary就可以了,像get方法一样简单
  • 支持磁盘缓存,而NSURLRequest仅支持内存缓存
  • 因为TTTableViewController + TTURLRequestModel的存在,搭配使用效果良好

在ios的开发中我有时也用到了OAuthConsumer进行oauth授权,利用OAuthConsumer的fetcher类请求远程数据,所以我想TTURLRequest和OAuthConsumer能不能搭配使用,这样就能用上three20相关便利方法加载远程数据。于是做了点简单的测试,果然成功了:)大体思路是:

  • 先利用OAuthConsumer根据提交的参数计算出oauth的Authorization认证头
  • 把Authorization头加到TTURLRequest
  • 由TTURLRequest提交数据。

直接上代码说话:

计算Authorization头

利用OAuthConsumer计算出Authorization头,为之后的请求做准备

//start 
OAConsumer * consumer = [[OAConsumer alloc] initWithKey:yourConsumerKey secret:yourSecret]; 
NSURL * url = [NSURL URLWithString:@"http://your-api-host/your-method"]; 
OAToken * authToken = [[OAToken alloc] initWithKey:yourAuthToken secret:yourAuthSecrent]; 
OAMutableURLRequest * request = [[OAMutableURLRequest alloc] initWithURL:url 
                                                                consumer:consumer 
                                                                   token:authToken 
                                                                   realm:nil 
                                                       signatureProvider:[[[OAPlaintextSignatureProvider alloc] init] autorelease]]; 
[request setHTTPMethod:@"POST"]; 
 
NSMutableArray * params = [NSMutableArray array]; 
OARequestParameter * p1 = [[OARequestParameter alloc] initWithName:@"param1" value:@"i'm param1"]; 
[params addObject:p1]; 
 
[request setParameters:params]; 
[request prepare]; 
 
TTDINFO(@"Authorization is %@", [request valueForHTTPHeaderField:@"Authorization"]);

使用TTURLRequest请求数据

将Authorization头附加到TTURLRequest,然后请求远程接口

TTURLRequest* req = [TTURLRequest requestWithURL:request.URL.absoluteString delegate:self]; 
req.response = [[[TTURLDataResponse alloc] init] autorelease]; 
req.httpMethod = @"POST"; 
req.cachePolicy = TTURLRequestCachePolicyNone; 
[req setValue:[request valueForHTTPHeaderField:@"Authorization"] forHTTPHeaderField:@"Authorization"]; 
[req send];

这个方法不需要对TTURLRequest进行修改,简单有效。

同分类推荐文章

  1. 「置顶」我做了什么 (2026-05-05 12:13:28)
  2. 万字长文推演:手机不再从 App 开始,Agent OS 如何接管任务入口 (2026-04-28 14:57:22)
  3. Android Perfetto 系列 10 - Binder 调度与锁竞争 (2025-11-16 15:33:30)

查看更多 移动开发 文章 →

建议继续学习

  1. 微信扫码登录网页实现原理 (累计阅读 17,467)
  2. 初探单点登录 SSO (累计阅读 10,619)
  3. 别得瑟了,你很可悲! (累计阅读 7,918)
  4. 如何设计用户登录 (累计阅读 6,644)
  5. 你会做Web上的用户登录功能吗? (累计阅读 6,376)
  6. 基于PECL OAuth打造微博应用 (累计阅读 5,213)
  7. 10个必需的iOS开发工具和资源 (累计阅读 5,195)
  8. 一个简单的基于PhoneGap的开源微博客户端 (累计阅读 5,164)
  9. 深入理解OAuth与豆瓣OAuth test (累计阅读 5,085)
  10. 为什么要登录? (累计阅读 5,060)