技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 算法 --> 如何将TTURLRequest和OAuthConsumer搭配使用

如何将TTURLRequest和OAuthConsumer搭配使用

浏览:1998次  出处信息

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. 新浪微博OAuth认证流程分析    (阅读:4060)
  2. 基于PECL OAuth打造微博应用    (阅读:4040)
  3. 深入理解OAuth与豆瓣OAuth test    (阅读:3855)
  4. PHP for Twitter OAuth 教学演示    (阅读:3526)
  5. 在sae中利用SaeFetchurl进行豆瓣的OAuth授权    (阅读:3554)
  6. OAuth那些事儿    (阅读:3195)
  7. OAuth 1.0a与1.0协议的改进…    (阅读:2891)
  8. 新浪微博 Android SDK中OAuth2.0隐式授权部分的一个代码逻辑问题    (阅读:2469)
  9. [演讲稿]OAuth1.0协议    (阅读:2401)
  10. 简述 OAuth 2.0 的运作流程    (阅读:2411)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1