2012-02-13 85 views
1

我试图在从ASIHTTPRequest切换后使用AFNetworkingAFNetworking设置POST请求的默认值

我会使用AFHTTPClient向我的api后端服务器发送请求。目前我提出请求(不含AFNetworking)获取csrf标记(我使用Django)之前 POST请求与AFNetworking(我从www.example.org/api/csrf得到它)。我这样做是因为我需要每个POST请求的csrf标记。

有没有一种方法可以在AFHTTPClient中自动执行此任务?

编辑:

为每一个岗位请求之前得到CSRF令牌代码:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kTokenURL]]; 
NSData *jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
NSDictionary *jsonDict = [jsonString objectFromJSONString]; 
NSString *csrf_token = [jsonDict objectForKey:@"csrf_token"]; 
[jsonString release]; 
NSLog(@"token: %@", csrf_token); 
+0

不知道你是如何得到CSRF令牌(一些代码将是不错:)),但我会继承了AFHTTPClient所以每次你必须做出一个POST请求,得到了csrf令牌会自动为您完成(在您的子类中)。 AFGowallaAPIClient项目中有一个例子。 – danielbeard 2012-02-14 01:54:01

+0

我更新了我的问题。顺便说一句,我只需要用于POST请求的csrf标记。是否可以只为这些类型的请求设置它? – 2012-02-14 03:50:02

回答

3

是的,创建一个AFHTTPClient子类(有中自带的示例项目就是一个例子AFNetworking)

在你@interface文件:

#import <Foundation/Foundation.h> 
#import "AFHTTPClient.h" 

@interface HttpClientSubclass : AFHTTPClient 
    + (HttpClientSubclass *)sharedClient; 
@end 

在您的实现文件:

#import "HttpClientSubclass.h" 

@implementation HttpClientSubclass 


+ (HttpClientSubclass *)sharedClient { 
    static HttpClientSubclass *_sharedClient = nil; 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
    _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"BASE-URL-GOES_HERE"]]; 
}); 

    return _sharedClient; 
} 

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
            path:(NSString *)path 
          parameters:(NSDictionary *)parameters { 

if ([method isEqualToString:@"POST"]) 
    //GET YOUR CSRF TOKEN HERE, AND PASS ONTO THE SUPER CLASS IN THE PARAMETERS 

return [super requestWithMethod:method path:path parameters:parameters]; 

} 

@end 
+0

谢谢。因此,我应该在'if([method isEqualToString:@“POST”])'中获得csrf标记,然后在返回语句之前在'parameters'字典中添加一个新的键/值对吗?哥们,谢啦! – 2012-02-14 04:29:52

+0

是的就是这样。然后当你从你的程序中调用它时,你可以使用共享的单例指针,而不必在每个类中实例化。 – danielbeard 2012-02-14 04:35:45