AFNetworking устанавливает значение по умолчанию для запроса POST - PullRequest
1 голос
/ 14 февраля 2012

Я пытаюсь использовать AFNetworking после переключения с ASIHTTPRequest.

Я бы использовал AFHTTPClient для отправки запроса на мой сервер API api.В настоящее время я делаю запрос (без AFNetworking) для получения токена csrf (я использую Django) перед каждым POST-запросом с AFNetworking (я получаю его от www.example.org/api/csrf).Я делаю это потому, что мне нужен токен csrf для каждого запроса POST.

Есть ли способ автоматически выполнить эту задачу в AFHTTPClient?

РЕДАКТИРОВАТЬ:

код для получения токена csrf перед каждым запросом POST:

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);

1 Ответ

3 голосов
/ 14 февраля 2012

Да, создайте подкласс 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
...