2012-02-13 123 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