前几天在项目里用了表单请求,然后记录了一下,链接附上 表单请求。
今天接口增加了需求,接口中开始支持中文字符了,然后悲剧的事情发生了,由于后台采用的是UTF-8编码,而且表单请求比较奇葩,回来在翻AFN的方法列表的时候,找到了一个方法,可以解决这个问题,so,记录一下
同样还是利用AFN的MultipartFormData请求方法,只不过在拼接请求模块的时候给上内容编码和传输编码
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:kURL parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"hxid\"",
@"Content-Type" : @"text/plain;charset=UTF-8",
@"Content-Transfer-Encoding" : @"8bit"} body:[kHXID dataUsingEncoding:NSUTF8StringEncoding]];
[formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"companyName\"",
@"Content-Type" : @"text/plain;charset=UTF-8",
@"Content-Transfer-Encoding" : @"8bit"} body:[self.companyNameTextField.text dataUsingEncoding:NSUTF8StringEncoding]];
[formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"desc\"",
@"Content-Type" : @"text/plain;charset=UTF-8",
@"Content-Transfer-Encoding" : @"8bit"} body:[self.descTextField.text dataUsingEncoding:NSUTF8StringEncoding]];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
uploadTaskWithStreamedRequest:request
progress:^(NSProgress * _Nonnull uploadProgress) {
}
completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
if ([[responseObject[@"code"] stringValue] isEqualToString:@"1"]) {
NSLog(@"创建公司成功");
[self searchCompanyID];
} else {
NSLog(@"创建公司失败%@", responseObject);
}
}
}];
[uploadTask resume];
这样就能正常处理中文字符了。