在AFNetworking中,httpbody和参数发布请求之间的区别?

时间:2016-08-10 17:01:23

标签: afnetworking afnetworking-3

首先使用httpbody:

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编码方法对数据进行编码,而另一个将传递原始数据。

1 个答案:

答案 0 :(得分:0)

第一种方法适用于将单个blob原始数据传递到服务器的情况。用于:

  • 将一小撮JSON数据发送到需要JSON数据的CGI
  • 以URL编码或表格数据编码格式发送预编码的正文数据
  • 发送到支持WebDAV的服务器的PUT请求中的文件数据。

第二种方法(提供一系列参数)旨在通过将正文数据作为一系列URL编码的键值对来模拟表单提交。对于大多数非基于JSON的CGI工作,这是你想要的。

决定使用哪一个很大程度上取决于服务器端的情况。如果脚本期望正文数据是一个JSON blob,则将JSON数据编码为NSData对象并将其作为正文数据发送。如果脚本需要HTML表单的结果,请使用其他方法。如果脚本不关心,请使用平均发送较少数据的方法。 : - )