Как установить данные для запроса «PUT» с помощью AFNetworking? - PullRequest
2 голосов
/ 25 января 2012

Я начал использовать AFNetworking, и он хорошо работает, когда дело доходит до выполнения простого запроса "GET".Однако сейчас я пытаюсь сделать запрос "POST".Я использую код ниже, чтобы сделать запрос "GET".Если посмотреть на puthPath из AFHTTPClient , невозможно установить данные, которые будут использоваться для тела.Я предполагаю, что есть другой способ исправить это.Я искал AFHTTPOperation как способ исправить это.Однако я не получаю это на работу.Проблема в том, что я не знаю, как использовать его с базовой аутентификацией.

Может ли кто-нибудь дать мне подсказку о том, как выполнить простой запрос POST с AFNetworking?

Ответы [ 3 ]

13 голосов
/ 26 января 2012

Я не нашел простого способа сделать это.Но я сделал так, как рекомендовал, и создал свой собственный подкласс AFHTTPClient В подклассе я реализовал методы ниже.Это позволяет выполнять как POST-запрос, так и PUT-запрос с моими собственными данными.

- (void)postPath:(NSString *)path 
  parameters:(NSDictionary *)parameters 
        data:(NSData*)data
     success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
     failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
{
    NSURLRequest *request = [self requestWithMethod:@"POST" path:path     parameters:parameters data:data];
    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
    [self enqueueHTTPRequestOperation:operation];
}

- (void)putPath:(NSString *)path 
     parameters:(NSDictionary *)parameters 
           data:(NSData*)data
        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
{
    NSURLRequest *request = [self requestWithMethod:@"PUT" path:path parameters:parameters data:data];
    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
[self enqueueHTTPRequestOperation:operation];
}

-(NSMutableURLRequest*)requestWithMethod:(NSString *)method 
                                    path:(NSString *)path 
                              parameters:(NSDictionary *)parameters 
                                 data:(NSData*)data;
{
    NSMutableURLRequest* request = [super requestWithMethod:method 
                                                      path:path 
                                                parameters:parameters];

    [request setHTTPBody:data];

    return request;
}
3 голосов
/ 23 марта 2015

С AFNetworking 2.0 я просто копирую код из

- (AFHTTPRequestOperation *)PUT:(NSString *)URLString
                 parameters:(id)parameters
                    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

и добавляю

[request setHTTPBody:data];

Вот оно:

NSString* str = [bookDetailLink objectForKey:@"Body"];
NSData* data = [str dataUsingEncoding: NSUTF8StringEncoding];
    NSMutableURLRequest *request = [self.manager.requestSerializer requestWithMethod:@"PUT" URLString:bookingDetailUrl parameters:nil error:nil];

[request setHTTPBody:data];
AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request
                                                                  success:^(AFHTTPRequestOperation *op, NSHTTPURLResponse *response) {
                                                                      NSLog(@"%@", response);
                                                                  }
                                                                  failure:^(AFHTTPRequestOperation *op, NSError *error) {
                                                                      NSLog(@"%@", error);
                                                                  }];

[self.manager.operationQueue addOperation:operation];

Я интегрирую SkyscannerAPI для нашего приложения iOS с использованием AFNetworking.

0 голосов
/ 24 сентября 2013

С AFNetworking 1.3.2 у меня работает следующий код:

NSData *imageData = UIImageJPEGRepresentation(thumb, 0.85F);

AFHTTPClient *httpClient = [[AFHTTPClient alloc]
    initWithBaseURL:[NSURL URLWithString:@"https://example.com/"]];
NSMutableURLRequest *request = [httpClient
    requestWithMethod:@"PUT" path:@"/foo" parameters:nil];
[request setHTTPBody:imageData];
[request setValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"];

AFHTTPRequestOperation *operation = [httpClient 
    HTTPRequestOperationWithRequest:request
        success:^(AFHTTPRequestOperation *op, NSHTTPURLResponse *response) {
            NSLog(@"%@", response);
        }
        failure:^(AFHTTPRequestOperation *op, NSError *error) {
            NSLog(@"%@", error);
        }];
[operation start];

Это приводит к запросу PUT с правильными заголовками, Content-Lenght и общим RESTfulness: -)

...