用法: http://www.hcios.com/archives/1406
红色代码是用来处理POST字典的参数的
1.
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:baseUrl parameters:postBody constructingBodyWithBlock:
^(id<AFMultipartFormData> _Nonnull formData) {
} progress:^(NSProgress *_Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
success(responseObject);
[SVProgressHUD dismiss];
} failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {
failure(error);
[SVProgressHUD showInfoWithStatus:@"网络错误"];
}];
2.
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
progress:(nullablevoid (^)(NSProgress *_Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask *task,id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task,NSError *error))failure
{
NSError *serializationError =nil;
NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURLURLWithString:URLString
relativeToURL:self.baseURL]
absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError];
if (serializationError) {
if (failure) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
failure(nil, serializationError);
});
#pragma clang diagnostic pop
}
returnnil;
}
__blockNSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:uploadProgress completionHandler:^(NSURLResponse *__unused response,id responseObject,NSError *error) {
if (error) {
if (failure) {
failure(task, error);
}
} else {
if (success) {
success(task, responseObject);
}
}
}];
[task resume];
return task;
}
- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(NSDictionary *)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
error:(NSError *__autoreleasing *)error
{
NSParameterAssert(method);
NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]);
NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error];
__blockAFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding];
if (parameters) {
for (AFQueryStringPair *pairinAFQueryStringPairsFromDictionary(parameters)) {
NSData *data =nil;
if ([pair.value isKindOfClass:[NSDataclass]]) {
data = pair.value;
} elseif ([pair.value isEqual:[NSNullnull]]) {
data = [NSData data];
} else {
data = [[pair.valuedescription]dataUsingEncoding:self.stringEncoding];
}
if (data) {
[formData appendPartWithFormData:data name:[pair.fielddescription]];
}
}
}
if (block) {
block(formData);
}
return [formData requestByFinalizingMultipartFormData];
}