如何将TTURLRequest和OAuthConsumer搭配使用

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头,为之后的请求做准备

//startOAConsumer* 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进行修改,简单有效

posted on 2012-09-25 17:02  barani  阅读(233)  评论(0编辑  收藏  举报

导航