2016-08-10 2 views
0

Сначала с httpbody:В AFNetworking разница между httpbody и параметром post request?

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"url" parameters:nil error:nil]; 

req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue]; 
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[req setHTTPBody:da]; 

[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 

    if (!error) { 
     NSLog(@"Reply JSON: %@", responseObject); 
    } else { 
     NSLog(@"Error: %@, %@, %@", error, response, responseObject); 
    } 
}] resume]; 

Второму с параметром:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[manager POST:@"https://exmaple.com/post.php" parameters:json progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
NSLog(@"JSON: %@", responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
NSLog(@"Error: %@", error); 
}]; 

Каковы различия между этим двумя методом пост? Я замечаю, что один другой параметр - один будет использовать метод кодирования url для кодирования данных, в то время как другой будет передавать необработанные данные.

ответ

0

Первый метод предназначен для ситуаций, когда вы передаете один блок необработанных данных на сервер. Используйте для:

  • Отправка сгусток данных JSON к CGI, ожидающей данных JSON
  • Отправка предварительно закодированные данные тела в URL-закодированы или форм-данных формата кодировки
  • данные файла в запрос PUT, отправленный на сервер, поддерживающий WebDAV.

Второй способ (предоставляющий ряд параметров) предназначен для эмулирования представления формы, предоставляя данные тела как ряд пар ключей-значений, кодированных URL. Для большинства работ CGI, не основанных на JSON, это тот, который вы хотите.

Решение, по которому использовать, во многом определяется тем, что происходит на стороне сервера. Если сценарий ожидает, что данные тела будут блобом JSON, закодируйте данные JSON в объект NSData и отправьте его как данные тела. Если сценарий ожидает результаты HTML-формы, используйте другой подход. Если сценарий не волнует, используйте любой подход, который посылает меньше данных в среднем. :-)