1

我正在尝试AFNetworkingASIHTTPRequest.

我将AFHTTPClient用于向我的 api 后端服务器发出请求。目前,我在每个POST 请求之前(我从POST 请求)发出请求(不带AFNetworking)以获取 csrf 令牌(我使用 Django )。我这样做是因为我需要每个 POST 请求的 csrf 令牌。AFNetworkingwww.example.org/api/csrf

有没有办法让这个任务自动完成AFHTTPClient

编辑:

在每个 POST 请求之前获取 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);
4

1 回答 1

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
于 2012-02-14T04:00:19.220 回答